我已经阅读了很多关于这个问题的内容,但是我仍然无法修复它。
在我的函数文件中,我声明一个变量,其值如下:
$px_host = "localhost";
我有一个像这样的数据库查询功能:
function dbQuery($database, $reqquery){
if(!$connect = mysql_connect($px_host, $px_dbuser, $px_dbpass)){
exit("Error - cannot connect to MySQL server - " . mysql_error());
}
if(!$database = mysql_select_db($database)){
exit("Error - cannot select database - " . mysql_error());
}
if(!$query = mysql_query($reqquery)){
exit("Error - query error.");
}
return $query;
}
每当我尝试运行该函数时,我都会收到“未定义变量”错误。我已经尝试将变量设置为全局,但它仍然说它未定义。它们位于同一个文件中,变量在函数之前定义和设置。
(我不好解释这个,所以试试并解决它)
包含dbQuery()
的文件包含在另一个文件中。在另一个文件中,有一个函数使用dbQuery()
来获取某些信息。是否有可能因为它最初是从第一个文件运行的,所以变量超出范围?
答案 0 :(得分:3)
在您的特定情况下,您应该在函数内声明函数外的所有变量。所以
function dbQuery($database, $reqquery){
global $px_host,$px_dbuser,$px_dbpass;
// rest of function
}
但是你的代码可以改进:你应该在脚本的开头定义常量
define('DB_HOST','localhost');
define('DB_USER','user');
define('DB_PASS','pass');
并在函数内部使用常量(因此不需要声明全局,因为主机,用户和传递不是变量而是常量,因此更多逻辑)。
您应该在流的开头只在数据库连接一次,这样函数dbQuery
只执行查询(根据函数名称)。
编辑完整答案:
正如一些用户在其他评论中所说的那样,我邀请您阅读php doc for mysql_connect并看到红色建议:
不鼓励使用此扩展程序。相反,应该使用MySQLi或PDO_MySQL扩展。另请参阅MySQL:选择API指南和相关的常见问题解答以获取更多信息。该功能的替代方案包括:
我不是在这里说你必须在你的项目中做什么,但阅读文档并遵循tipps /建议对于项目的成功至关重要。 :)
答案 1 :(得分:1)
现在已经很晚了,所以这只是一个部分答案。
您可以采取的另一种方法是将数据库实例传递给帮助程序函数,从而解决凭据问题。
function dbQuery($database, $reqquery)
{
if (false !== ($query = mysql_query($reqquery, $database))) {
exit("Error - query error.");
}
return $query;
}
现在这个函数通过参数接收它的依赖关系,并且也更短,每次都不连接/查询/断开。
剩下的代码必须写在别处;如果你需要在每个页面都有一个数据库,你可以在链上写下这个:
if (false === ($connect = mysql_connect($px_host, $px_dbuser, $px_dbpass))) {
exit("Error - cannot connect to MySQL server - " . mysql_error());
}
if (false === mysql_select_db($database)) {
exit("Error - cannot select database - " . mysql_error());
}
然后在任何需要的地方传递$connect
。
$res = dbQuery($connect, 'SELECT "hello world"');
当然,mysql_connect
和朋友使用隐含连接,所以从技术上讲,无论如何你都不需要传递它;尽管如此,这仍是一个很好的模式。
最后但并非最不重要
了解如何使用PDO并陶醉于OOP的神奇世界; - )
答案 2 :(得分:-3)
如果将变量设置为global,则还需要在函数中将其设置为全局变量。在这种情况下:
$px_host = "localhost";
function dbQuery($database, $reqquery){
global $px_host;
if(!$connect = mysql_connect($px_host, $px_dbuser, $px_dbpass)){
exit("Error - cannot connect to MySQL server - " . mysql_error());
}
if(!$database = mysql_select_db($database)){
exit("Error - cannot select database - " . mysql_error());
}
if(!$query = mysql_query($reqquery)){
exit("Error - query error.");
}
return $query;
}
这可以解决这个问题。