我收到此错误:
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)或die(mysql_error());”上 但我在任何地方都看不到问题。
我尝试过的
有人知道怎么了吗?
根据注释,听起来问题似乎是由于require_once()在函数内部使用引起的。
require_once()
正在发生两件事之一。要么:
Connection.php
require_once
要么…
问题在于,当第一次包含该文件时(假定是从该函数中来的),该$connection变量在函数作用域中创建,并且像其他任何函数变量一样,在该函数的末尾消失了。当您第二次调用该函数时,包含不会发生,因为您正在使用require_once。
$connection
您可能可以通过调用require()而不是来解决此问题require_once(),但这最终将在您每次调用该函数时重新连接到数据库- 这是很多不必要的开销。只需将include移到函数外部,然后将连接传递到函数中,或将其用作全局变量,这将更加清洁。
require()
看起来像这样:
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_*
实际上,切换到类似mysqli_*函数之类的东西实际上并不难-有一组非对象的函数与您现在所使用的几乎相同。
mysqli_*
mysql_real_escape_string()
mysqli_real_escape_string()