2014-09-03 68 views
0

我有幾個php函數用於不同的目的。每個人都在執行指定的mysqli查詢,但只有第一個查詢返回結果。mysqli查詢不返回結果裏面的功能

這裏是我的代碼

function setAsNonWorkingProxy(){ 

    GLOBAL $mysqli, $proxy; 

    $port = explode(":",$proxy)[1]; 
    $proxy = explode(":",$proxy)[0]; 

    if ($sql2 = $mysqli->prepare("UPDATE proxies SET failed=failed+1 WHERE ip=? AND port=?")) { 

     $sql2->bind_param("si",$proxy, $port); 

     $sql2->execute(); 

     $sql2->close(); 

    } 
} 

function markProxyAsUsed(){ 

    GLOBAL $mysqli, $proxy; 

    $port = explode(":",$proxy)[1]; 
    $proxy = explode(":",$proxy)[0]; 

    if ($sql3 = $mysqli->prepare("UPDATE proxies SET tried=tried+1 WHERE ip=? AND port=?")) { 

     $sql3->bind_param("si",$proxy, $port); 

     $sql3->execute(); 

     $sql3->close(); 
    } 
} 

setAsNonWorkingProxy(); 
markProxyAsUsed(); 

當我做到這一點,只有被稱爲第一個函數,裏面執行查詢。 第二個函數被調用並且執行的查詢沒有任何錯誤,但沒有任何反應。我在兩個函數中使用UDPDATE查詢。

如果我可以改變功能的順序:

markProxyAsUsed(); 
setAsNonWorkingProxy(); 

同樣,只有第一個作品。這是爲什麼發生?

+0

只與函數定義沒有聲明如何纔有可能回答它? – gvgvgvijayan 2014-09-03 12:33:00

+0

不知道你在函數內部做了什麼,我們無法回答這個問題。 – 2014-09-03 12:33:15

+0

我加了兩個函數;) – Th3lmuu90 2014-09-03 12:35:32

回答

1

問題是你正在函數中引入全局作用域變量。然後在$ proxy上使用explode並將結果存儲回$ proxy(記住這是同一個全局變量),所發生的是第二個調用的函數現在與修改的$ proxy變量一起工作。如果你兩次調用同一個函數,它甚至都沒有關係,它會在第二次失敗。

function markProxyAsUsed(){ 

    GLOBAL $mysqli, $proxy; //You are bringing global scope vars in here 


    // If $proxy is something like '222.222.222.222:8080' on your first call 
    // On the second call will be only '222.222.222.222' and your logic will be broken 
    $port = explode(":",$proxy)[1]; 
    $proxy = explode(":",$proxy)[0]; //Here is where you are messing it 
    //Quickfix 
    $ip = explode(":", $proxy)[0]; // then use $ip in your query 

    //Proper fix would be to declare the function as so function markProxyAsUsed($proxy) 
    //and pass it when you call the function. 
+0

天哪,我多麼愚蠢,沒錯!謝謝! ;) – Th3lmuu90 2014-09-03 12:48:44

1

發生這種情況是因爲您在函數中編輯了代理變量。您運行的第一個函數將代理變量從xxxx:yy更改爲xxxx

第二次執行該函數時,$ port變量將爲空,並且sql語句中的where子句將找不到它。

+0

天哪,我是多麼愚蠢,這是正確的!謝謝! ;) – Th3lmuu90 2014-09-03 12:49:07