0

我的问题是,当我在全局范围内使用 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."'");
4

3 回答 3

1

$rReq变量未在函数范围内定义,这就是它失败的原因。如果可能,您应该将其作为参数传递给函数。

此外,我建议永远不要抑制任何错误。这被认为是不好的做法,如果您有错误报告,“未定义变量...”错误会帮助您。

于 2012-12-25T16:58:41.190 回答
1

您没有在查询中进行任何错误检查,因此难怪它会在不告诉您出了什么问题的情况下失败。这应该是首先要解决的问题。有关如何添加正确的错误检查,请参阅手册此问题。此外,@连接时将抑制错误消息 - 删除它们,您将获得有关问题所在的信息。

正如您所说,您的具体问题与范围有关。您需要将所需的所有变量传递给函数,例如:

function failed($rReq, $qe)
  { 
   ....
  }

另外,请注意您的代码容易受到SQL 注入的影响,这是非常危险的。

mySQL 扩展已经过时,用它开始编写新代码并不是一个好主意。考虑改用PDO - 我知道在学习新东西时这是一个额外的压力,但它真的值得额外的努力!

于 2012-12-25T17:00:05.457 回答
0

为了使$rReq变量在函数中可见,您需要在此处声明它,将其作为参数传递,或使用global将其拉入:

function failed()
{
    global $rReq;
    $qe = mysql_query("SELECT success_count FROM db WHERE serial='".$rReq."'");
    ...

来自函数外部的变量在函数内部不会自动可见,而来自函数内部的变量在外部不可见。

于 2012-12-25T16:59:14.753 回答