Я получаю эту ошибку:
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 ()); Но я ничего не вижу.
Что я пробовал:
Кто-нибудь знает, что случилось?
Основываясь на комментариях, похоже, что проблема вызвана использованием функции require_once()
внутри функции.
Одна из двух вещей происходит. Или:
Вы уже включили Connection.php
где-то в другом месте, поэтому, когда вы дойдете до функции, на самом деле она не включена … из-за некогда части require_once
.
или…
Он работает при первом вызове функции, но во второй раз, когда вы его вызываете, файл уже включен и не включается снова.
Проблема заключается в том, что когда файл сначала включен (предполагается, что это изнутри этой функции), переменная $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()); }
Все, что было сказано, есть две основные проблемы с этим кодом.
Вы используете функции mysql_*
которые устарели и скоро будут удалены из новых версий PHP. См. Этот вопрос для получения дополнительной информации. Почему я не должен использовать функции mysql_ * в PHP?
На самом деле не так сложно переключиться на что-то вроде функций mysqli_*
– есть набор объектов, которые не являются объектами, которые почти идентичны тем, что вы используете сейчас.
Вы включаете переменную в свой запрос, не избегая ее. По крайней мере, вы должны называть mysql_real_escape_string()
(или mysqli_real_escape_string()
), но лучшим решением является просмотр подготовленных операторов. Более подробную информацию о подготовленных инструкциях вы можете найти здесь: Как я могу предотвратить SQL-инъекцию в PHP?