Я получаю следующую ошибку по тому же запросу:
Предупреждение: mysql_query (): доступ запрещен для пользователя 'www-data' @ 'localhost' (с использованием пароля: НЕТ)
Ошибка возникает только при первой попытке с любого конкретного IP-адреса. После того, как я обновляю страницу, скрипт работает нормально. Чтобы быть более конкретным, я буду запускать его из браузера в одном месте, и он выдаст ошибку. Если я обновлю страницу, проблема исправлена. Пока я не попробую из другого места.
Из того, что я понял, потеря соединения с сервером базы данных и попытка восстановить соединение с именем пользователя по умолчанию. Что меня смущает, так это то, что каждый раз происходит сбой по одному и тому же запросу. Давайте назовем этот query_X. Несколько запросов выполняются перед query_X, включая выборки, вставки и обновления. Query_X выглядит так:
UPDATE game_users
SET status_cd=$tmp_status,
expire_date=date_add('$currentExpire', interval $l_license_duration_days day)
WHERE game_user_id=$l_game_user_id
В качестве примера передаются следующие переменные:
$tmp_status = 1;
$currentExpire = '2011-12-05';
$l_license_duration_days = 30;
$l_game_user_id = 1;
Что в этом запросе вызывает сбой соединения и почему обновление страницы решает проблему?
Кстати, я использую постоянное соединение.
Редактировать: Я только что попробовал снова с IP, который я пробовал прошлой ночью. И я снова получил ошибку. Это при первом запуске скрипта. После того, как я запустил страницу во второй раз, она работала нормально.
Редактировать: Он также выдаст ошибку при первом запуске в определенном браузере, даже если он находится на том же IP-адресе, т. Е. Будет один раз ошибка в Firefox, а затем исправится, ошибка Chrome один раз, а затем исправится и т. Д. .
Edit: я сузил это до функции mail (), которая выполнялась как раз перед query_X. Я до сих пор не знаю, почему функция mail закрывает соединение mySQL. Я решил поместить функцию mail (которая работает правильно и отправляет электронную почту) в конец php-файла, где я бы в любом случае закрыл соединение. Это хак, но я уже потратил слишком много времени на это.