2012-12-25 60 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