我的问题是,当我在全局范围内使用mysql时,它可以正常工作,但在它里面却没有,请看看代码:
//connect.php
@mysql_connect($mysql_server, $mysql_admin, $mysql_pass);
@mysql_select_db($mysql_db);
//main.php
require_once("connect.php");
$rReq = $_REQUEST["req"];
function failed()
{
$qe = mysql_query("SELECT success_count FROM db WHERE serial='".$rReq."'");
$ro = mysql_fetch_row($qe);
$ro[0]+=1;
mysql_query("UPDATE db SET success_count = '".$ro[0]."' WHERE serial='".$rReq."'");
}
//main code
failed(); // not works, mysql_query does nothing
//if i put here the same code but outside the function it works :/
$qe = mysql_query("SELECT success_count FROM db WHERE serial='".$rReq."'");
$ro = mysql_fetch_row($qe);
$ro[0]+=1;
mysql_query("UPDATE db SET success_count = '".$ro[0]."' WHERE serial='".$rReq."'");
答案 0 :(得分:1)
$rReq
变量未在函数范围内定义,这就是失败的原因。
如果可能,您应该将它作为参数传递给函数。
我也建议不要压制任何错误。这被认为是不好的做法,如果你有错误报告,“未定义的变量......”错误会帮助你。
答案 1 :(得分:1)
您没有在查询中进行任何错误检查,因此毫不奇怪它在没有告诉您出错的情况下失败。这应该是第一件要解决的问题。有关如何添加正确的错误检查,请参阅manual或this question。此外,@
会在连接时删除错误消息 - 删除它们,您将获得有关错误的信息。
正如您所说,您的具体问题与scope有关。您需要将所需的所有变量传递给函数,例如:
function failed($rReq, $qe)
{
....
}
另请注意,您的代码容易受到SQL injection的攻击,这非常危险。
mySQL扩展已经过时了,开始用它编写新代码并不是一个好主意。考虑切换到PDO - 我知道在学习新东西时这是一个额外的压力,但它真的值得额外的努力!
答案 2 :(得分:0)
为了使$rReq
变量在函数内部可见,您需要在那里声明它,将其作为参数传递,或使用global
将其拉入:
function failed()
{
global $rReq;
$qe = mysql_query("SELECT success_count FROM db WHERE serial='".$rReq."'");
...
函数外部的变量不会在其中自动显示,函数内部的变量在其外部不可见。