«Предупреждение: mysql_query (): предоставленный аргумент не является допустимым ресурсом MySQL-Link"

Я получаю эту ошибку:

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource 

Вот мой Connection.php:

 $userDB_server = ""; $userDB_user = ""; $userDB_password = ""; $userDB_database = ""; $connection = mysql_connect("$userDB_server","$userDB_user","$userDB_password") or die ("Unable to establish a DB connection"); $userDB = mysql_select_db("$userDB_database", $connection) or die ("Unable to establish a DB connection"); $gameDB_server = ""; $gameDB_user = ""; $gameDB_password = ""; $gameDB_database = ""; $gameDB_connection = mysql_connect("$gameDB_server","$gameDB_user","$gameDB_password", true) or die ("Unable to establish a DB connection"); $gameDB = mysql_select_db("$gameDB_database", $gameDB_connection) or die ("Unable to establish a DB connection"); 

Вот моя функция:

 require_once('Connection.php'); $findQuery = sprintf("SELECT * FROM `Keys` WHERE `ID` = '$gID'"); $findResult = mysql_query($findQuery, $connection) or die(mysql_error()); $resultRow = mysql_fetch_assoc($findResult) or die(mysql_error()); 

Ошибка находится на «$ findResult = mysql_query ($ findQuery, $ connection) или умереть (mysql_error ()); Но я ничего не вижу.

Что я пробовал:

  • Я пробовал с и без «истины» во втором соединении, по-видимому, ничего не менял.
  • Повторение соединения $ и $ gameDB_connection ничего не показывает,
  • Использование var_dump в $ connection показывает «resource (9) типа (mysql link)»
  • Удаление $ connection из mysql_query связано с подключением к другой БД (gameDB_connection), и я получаю сообщение об ошибке, что таблица не существует (ее нет в этой БД).
  • Добавление / изменение / удаление обратного запроса (`) из запроса, похоже, не влияет на ошибку
  • Эквивалент переменной $ gID корректно, поэтому он не является нулевым (его 1001 в этом случае)
  • Если я запустил элемент SELECT в действительной форме sql (вместо php), он будет правильно списком их
  • Connection.php используется в других местах (одна страница читается из обеих баз данных одновременно) успешно. Нет ошибок где-либо еще

Кто-нибудь знает, что случилось?

Solutions Collecting From Web of "«Предупреждение: mysql_query (): предоставленный аргумент не является допустимым ресурсом MySQL-Link""

Основываясь на комментариях, похоже, что проблема вызвана использованием функции require_once() внутри функции.

Одна из двух вещей происходит. Или:

  1. Вы уже включили Connection.php где-то в другом месте, поэтому, когда вы дойдете до функции, на самом деле она не включена … из-за некогда части require_once .

    или…

  2. Он работает при первом вызове функции, но во второй раз, когда вы его вызываете, файл уже включен и не включается снова.

Проблема заключается в том, что когда файл сначала включен (предполагается, что это изнутри этой функции), переменная $connection создается в области видимости функции и, как и любая другая функциональная переменная, уходит в конце функции. Когда вы вызываете функцию во второй раз, включение не происходит, потому что вы используете require_once .

Вероятно, вы можете исправить это, вызвав require() вместо require_once() , но это приведет к повторному подключению к базе данных каждый раз, когда вы вызываете эту функцию, что представляет собой много лишних накладных расходов. Гораздо чище просто переместить include вне функции и либо передать соединение в функцию, либо использовать ее как глобальную переменную.

Это будет выглядеть так:

 require_once('Connection.php'); function getResult() { global $connection; $findQuery = "SELECT * FROM `Keys` WHERE `ID` = '$gID'"; $findResult = mysql_query($findQuery, $connection) or die(mysql_error()); $resultRow = mysql_fetch_assoc($findResult) or die(mysql_error()); } 

Все, что было сказано, есть две основные проблемы с этим кодом.

  1. Вы используете функции mysql_* которые устарели и скоро будут удалены из новых версий PHP. См. Этот вопрос для получения дополнительной информации. Почему я не должен использовать функции mysql_ * в PHP?

    На самом деле не так сложно переключиться на что-то вроде функций mysqli_* – есть набор объектов, которые не являются объектами, которые почти идентичны тем, что вы используете сейчас.

  2. Вы включаете переменную в свой запрос, не избегая ее. По крайней мере, вы должны называть mysql_real_escape_string() (или mysqli_real_escape_string() ), но лучшим решением является просмотр подготовленных операторов. Более подробную информацию о подготовленных инструкциях вы можете найти здесь: Как я могу предотвратить SQL-инъекцию в PHP?