我收到此错误:
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());” 但我没有看到任何问题。
我尝试了什么:
任何人都知道出了什么问题?
答案 0 :(得分:1)
根据评论,听起来问题是在函数中使用require_once()
引起的。
两件事之一正在发生。之一:
您已经在其他地方加入了Connection.php
,所以当您进入该功能时,它实际上并未包括在内......因为{{1}的曾经部分}。
...或
第一次调用该函数时 正在工作,但第二次调用该函数时,该文件已被包含在内并且不再包含该文件。
< / LI> 醇>问题在于,当首次包含文件时(假设它来自此函数),require_once
变量在函数范围内创建,并且像任何其他函数变量一样,在结束时消失了。功能。当您第二次调用该函数时,由于您正在使用$connection
,因此不会发生包含。
您可以通过调用require_once
而不是require()
来解决此问题,但每次调用该函数时最终都会重新连接到数据库 - 这会带来很多不必要的开销。只需将include移动到函数外部,并将连接传递给函数,或将其用作全局变量,就更清晰了。
看起来像这样:
require_once()
所有这一切,这段代码存在两个主要问题。
您正在使用已弃用的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());
}
函数,很快将从新版本的PHP中删除。有关详细信息,请参阅此问题:Why shouldn't I use mysql_* functions in PHP?
实际上切换到类似mysql_*
函数的东西并不困难 - 有一组非对象的函数几乎与你现在使用的函数相同。
您在查询中包含一个变量而未正确转义它。至少你应该调用mysqli_*
(或mysql_real_escape_string()
),但更好的解决方案是查看准备好的语句。您可以在此处找到有关预准备陈述的更多信息:How can I prevent SQL injection in PHP?