Сбой соединения с MySQL по тому же запросу. Попытка восстановить соединение с пользователем по умолчанию - PullRequest
0 голосов
/ 06 декабря 2011

Я получаю следующую ошибку по тому же запросу: Предупреждение: 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-файла, где я бы в любом случае закрыл соединение. Это хак, но я уже потратил слишком много времени на это.

1 Ответ

0 голосов
/ 07 декабря 2011
  • Похоже, что вы закрыли соединение перед некоторым вызовом mysql_query (). Сообщение об отказе в доступе должно появиться на этапе mysql_connect ().
  • Вы уверены, что ошибка в запросе, а не в функциях подключения / закрытия?
...