-2

好的,所以我现在遇到了最奇怪的问题。我的代码很好!它完全按照我的意愿和期望运行,这对我来说是一个巨大的冲击,因为每次我去做 MySQL 时,我都会遇到无穷无尽的问题,而我永远找不到解决方案。

但是今天,一切都很完美。所以有什么问题?问题是当我尝试将我的代码包装在一个函数中时,它只是......停止工作!在每一步之后我都会进行错误检查,并且在它自己的文件和行中工作正常。但是我需要把它放在一个函数中,这样我就可以添加参数(因此是“extraQuery”变量),然后“返回”它,这样我就可以从一个单独的文件中访问它。

这是我的基本代码:

$link = mysql_connect($db_host, $db_user, $db_pass) or die ("Unable to connect: " . mysql_error());
mysql_select_db($db_name, $link) or die("Couldn't connect to database: " . mysql_error());

$extraQuery = "";
$result = mysql_query("SELECT * FROM things " . $extraQuery . " ORDER BY RAND() LIMIT 1", $link);

$row = mysql_fetch_array($result, MYSQL_ASSOC);
mysql_close($link);
echo($row['content']);

正如我所说,它完全可以正常工作。但是当我这样做时......

function getResult(){
    $link = mysql_connect($db_host, $db_user, $db_pass) or die ("Unable to connect: " . mysql_error());
    mysql_select_db($db_name, $link) or die("Couldn't connect to database: " . mysql_error());

    $extraQuery = "";
    $result = mysql_query("SELECT * FROM things " . $extraQuery . " ORDER BY RAND() LIMIT 1", $link);

    $row = mysql_fetch_array($result, MYSQL_ASSOC);
    mysql_close($link);
    echo($row['content']);
}
getResult();

..它在第二行停止工作,告诉我“未选择数据库”。但是正如您所看到的,我明确选择了一个确实存在的数据库,并且当它不在函数中时可以正常工作。只是为了强调这一点,这不是我的用户权限,也不是数据库的名称;因为它在函数之外可以完美运行。

任何可能的帮助将不胜感激。

4

4 回答 4

3

由于变量范围,您的数据库变量在函数内部不可用。您需要将其作为参数传递getResult()才能访问它:

function getResult($db_host, $db_user, $db_pass, $db_name, $extraQuery){
    $link = mysql_connect($db_host, $db_user, $db_pass) or die ("Unable to connect: " . mysql_error());
    mysql_select_db($db_name, $link) or die("Couldn't connect to database: " . mysql_error());

    $extraQuery = "";
    $result = mysql_query("SELECT * FROM things " . $extraQuery . " ORDER BY RAND() LIMIT 1", $link);

    $row = mysql_fetch_array($result, MYSQL_ASSOC);
    mysql_close($link);
    echo($row['content']);
}
getResult();
于 2012-06-11T01:01:24.740 回答
0

变量 $db_host,..., $db_name 在那里是因为你想隐藏你的访问权限,或者函数与这里写的完全一样?

如果确实如此,您可能需要将这些变量声明为全局变量(函数的第一行:)global $db_host,..., $db_name;,否则它们在函数中的值未初始化。

注意:使用它并不好。想想你的代码可以避免这种情况,并建议至少使用 MySQLi 或 PDO

于 2012-06-11T00:59:31.850 回答
0

看起来访问数据库的变量不在函数的范围内。

您需要执行以下操作:

function getResult( $db_host, $db_user, $db_pass, $db_name)

然后调用函数:

getResult( $db_host, $db_user, $db_pass, $db_name);

或者将所有这些变量声明为global变量,如下所示:

global $db_host, $db_user, $db_pass, $db_name;

这确保它们在函数的范围内。否则,它们都是未定义的。

于 2012-06-11T01:00:04.033 回答
0

您需要将 $db_host、$db_name 等声明为全局,或者将它们传递给函数,就像这样。

function getResult($db_host, $db_user, $db_pass){
//
}

getResult('localhost', 'user', 'pass');
于 2012-06-11T01:01:25.780 回答