Много читал википедию по MySQL, довольно-таки долго пользуюсь самим MySQL. Но все-таки хотелось бы разобраться в функциях, которые я ранее не использовал... Возможно, они окажутся очень даже полезными для меня. Буду рад любой помощи.
1. В функции mysql_set_options есть параметр MULTI_STATEMENTS ("Allow/Disallow executing multiple SQL statements in one query"). Я правильно понял, это позволяет использовать запросы следующего вида? SELECT * FROM table; UPDATE table SET column = 1
Т.е. использовать несколько запросов в одной строке. Я когда-то пробовал так делать, но выполнялся только первый запрос (или не выполнялось ни одного - не помню уже, если честно).
2. mysql_tquery, mysql_pquery и mysql_query. Чтобы не было много текста, составил вот такую вот табличку. Все ли правильно в ней?
Открыть/закрыть
Функция |
Кэширование |
Обработка запроса |
Обработка результата |
mysql_query |
+ |
отсутствует отдельный поток, сервер ждет ответа от MySQL |
в той функции, где использовалась mysql_query |
mysql_tquery |
- |
в отдельном потоке |
в отдельной public-функции |
mysql_pquery |
+ |
в отдельных потоках, работающих параллельно |
в отдельной public-функции |
3. Не понял что за функции cache_set_result и cache_get_result... Не могли бы, пожалуйста, прояснить их сущность?
4. Последнее связано с кэшированием.. Ранее моя регистрация имела следующую структуру:
Код HTML:
1. По имени игрока получить его пароль.
2. Сверять полученный пароль с введенным.
3. Если пароли идентичны, загружать аккаунт полностью.
Сейчас же я перешел к кэшированию:
Код HTML:
1. Получить всю информацию об игроке.
2. Из полученных данных записать сразу пароль игрока в переменную. Потом сохранить кэш: cache_save(gPlayer[playerid][pCache]).
3. После успешного ввода пароля использовать:
[PAWN]
gPlayer[playerid][pCache] = cache_set_active(); // переключиться на другой (поток?)
// получить и сразу записать в переменные все данные игрока
cache_delete(gPlayer[playerid][pCache]); // очистить содержимое (потока?)
cache_unset_active(); // возвращаемся к первоначальному (основному) (потоку?)
_:gPlayer[playerid][pCache] = INVALID_CACHE_ID;// INVALID_CACHE_ID - моя константа со значением -1
[/PAWN]
Ну, и на всякий случай в OnPlayerDisconnect:
[PAWN]
if(_:gPlayer[playerid][pCache] != INVAlID_CACHE_ID) cache_delete(gPlayer[playerid][pCache]);
[/PAWN]
Будет ли таковой код нормальный и не должны ли теоретически возникнуть с ним проблемы? Сколько тестировал, не замечал, но мало ли что-то работает на самом деле неправильно...