2010-05-22 429 views
0
function get_ibo_id() { 
    if($registerquery = $this->conn->query("SELECT ibo_id FROM fasttrack WHERE count <  
        8 && flag = 1 ")){ 
    $this->increase_count(); 
    while ($row = $registerquery->fetch_assoc()) { 
      return $row[ibo_id]; 
     } 
    } 
    else return "No id"; 
} 

它總是進入if塊,即使條件不滿足... 快要瘋了這個功能有什麼問題?

+1

什麼是您的'$ this-> conn-> query'方法,它返回什麼? – Gumbo 2010-05-22 08:13:36

+0

請詳細解釋(用你自己的話說,不是代碼)這十行代碼應該做什麼。 – VolkerK 2010-05-22 08:17:56

+0

我剛投了答案,滿足我的問題,並點擊單色檢查圖標。我希望我做對了..謝謝大家的答案! – Joann 2010-05-22 08:29:18

回答

4

那麼$ registerquery永遠不會返回false,即使你條件不符合......

在if語句,你必須得到一個變量返回true或false ...

我會做的就是這樣的事情(你必須把它擅長於你的OOP代碼):

function get_ibo_id() { 

$registerquery = $this->conn->query("SELECT ibo_id FROM fasttrack WHERE count < 8 && flag = 1 "); 
if (mysql_num_rows($registerquery) > 0) { 
$this->increase_count(); 
    while ($row = $registerquery->fetch_assoc()) { 
      return $row[ibo_id]; 
     } 
    } 
    else return "No id"; 
} 

它使一個查詢,檢查,如果你比0的結果回來,做什麼是必須做,否則回聲是一個錯誤......

拉吉斯拉夫

+0

PHP不是一種強類型語言(請參閱類型比較表http://php.net/manual/en/types.comparisons.php瞭解什麼值評估爲* true *)。 – Gumbo 2010-05-22 08:21:38

+1

(計數結果集中的記錄,或者只是檢查是否有滿足條件的記錄)可能是正確的方向。但是由於'$ registerquery'顯然應該是一個對象,所以它不能被傳遞給'mysql_num_rows()'。它不一定是MySQL。 – VolkerK 2010-05-22 08:22:39

+0

我知道,但這就是爲什麼我說頂端,他將不得不採用它到自己的OOP代碼,因爲我不知道我們正在處理什麼樣的對象... – Ladislav 2010-05-22 08:30:52

0

我認爲這個問題是

$this->conn->query(...)
是不會像您期望的那樣返回FALSE。
如果你的查詢產生一個空的結果集,mysql_query仍然返回一個資源,而不是FALSE。 您應該檢查使用的返回行數
mysql_num_rows($registerquery)

+0

再次:可能是正確的方向,但OP沒有提到mysql_query()和'$ registerquery-> fetch_assoc()'表明'$ registerquery'是一個對象,而不是mysql結果資源。 – VolkerK 2010-05-22 08:27:56

+0

True :-) 我只是想指出使用率返回值的問題。 – garph0 2010-05-22 08:55:10