2012-12-25 48 views
0

我的问题是,当我使用它的作品全球范围内的MySQL,但它里面是不是,看看代码,请:PHP MYSQL_QUERY不工作里面功能

//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

您应该在函数中用'global'关键字声明全局变量。没有这个变量,例如$ rReq,就是局部变量(具有空值)。 – Stan

回答

1

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

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

0

为了使$rReq变量是在函数内部可见,所以需要在其声明中,把它作为一个参数,或使用global把它在:

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

变量来自外部的函数不会在其中自动可见,并且函数内部的变量在其外部不可见。

+1

虽然技术上这回答了这个问题,但您还应该提及1)SQL注入,2)mysql_ deprecation,以及可能3)两个查询可以合并成一个的事实。 – DCoder

+0

与上面的代码相比,有更多的问题;这不是codereview.stackexchange.com – Amber

1

你没有在你的查询中做任何错误检查,所以难怪它没有告诉你哪里出了问题。这应该是第一个要解决的问题。有关如何添加适当的错误检查,请参见manualthis question。此外,@将在连接时抑制错误消息 - 删除它们,您将得到错误信息。

正如你所说,你的具体问题是与scope。你需要通过你需要给函数的所有变量,例如像这样:

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

另外,请注意你的代码很容易受到SQL injection,这是非常危险的。

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

+0

谢谢,现在我明白了:)我用$ GLOBAL []。这不是我的整个代码,我做了antisql的事情。是的,这是我的错,因为我的服务器关闭显示错误 – psychoboi111