簡體   English   中英

PHP Mysql_query在函數內部不起作用

[英]PHP Mysql_query not works inside function

我的問題是,當我在全局范圍內使用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."'");

$rReq變量未在函數范圍內定義,這就是失敗的原因。 如果可能的話,您應該將它作為參數傳遞給函數。

我也建議不要壓制任何錯誤。 這被認為是不好的做法,如果你有錯誤報告,“未定義的變量......”錯誤會幫助你。

您沒有在查詢中進行任何錯誤檢查,因此難怪它會在沒有告訴您出錯的情況下失敗。 這應該是第一件要解決的問題。 有關如何添加正確的錯誤檢查,請參閱手冊此問題 此外, @將在連接時禁止錯誤消息 - 刪除它們,您將獲得有關出錯的信息。

如你所說,你的具體問題與范圍有關 您需要將所需的所有變量傳遞給函數,例如:

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

另請注意,您的代碼易受SQL注入攻擊,這非常危險。

mySQL擴展已經過時了,開始用它編寫新代碼並不是一個好主意。 考慮切換到PDO - 我知道在學習新東西時這是一個額外的壓力,但它真的值得額外的努力!

為了使$rReq變量在函數內部可見,您需要在那里聲明它,將其作為參數傳遞,或者使用global來將其拉入:

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

函數外部的變量不會在其中自動顯示,函數內部的變量在其外部不可見。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM