php
  • mysql
  • pdo
  • 2014-09-30 88 views 0 likes 
    0

    我有一個非常簡單的功能在DB檢查,如果我們知道一個藝術家(基於一個唯一的ID),如果是這種情況,我想收集他的相關信息:PHP/PDO:如果一列= 0沒有結果?

    function isArtistKnown($id_artist){ 
        global $pdo; 
    
        $isKnownQuery = $pdo->query("SELECT * FROM artistes WHERE IDArtiste = '$id_artist'"); 
        if($isKnownQuery->rowCount() > 0){ 
         $KnownArtiste = $isKnownQuery->fetch(PDO::FETCH_OBJ); 
         return $KnownArtiste; 
        }else{ 
         return $isKnownQuery->errorInfo(); 
        } 
    } 
    

    問題是以下幾點:

    如果IDArtiste是已知的,另一個colmun稱爲「last_tweet」(INT50)等於0,則PDO發現1分的結果和$ KnownArtiste被填滿。 現在,如果IDArtiste知道,但科拉姆‘last_tweet’!= 0那麼PDO不會找到任何結果(並且errorInfo()等於0000,這意味着:沒有錯誤)

    你有一個想法,問題來自哪裏?

    +3

    這意味着什麼你的條件,沒有行匹配回! – senK 2014-09-30 11:31:01

    +0

    你在另一個mysql客戶端運行相同的查詢嗎? (也可能看起來不懷疑$ id_artist可疑,我的猜測是,這是一個整數,不應該需要''''引號,你也可以查看準備好的語句) – johannes 2014-09-30 11:33:08

    +0

    @senk我確認有一個比賽。 IDArtiste始終保持不變,並且它是SQL條件中唯一的一個。 – Cyc 2014-09-30 11:46:44

    回答

    0

    documentation狀態:

    PDO ::查詢()在一個函數調用執行SQL語句, 將結果集返回(如果有的話)作爲 PDOStatement對象對象返回由語句

    這意味着,如果沒有匹配,它將不返回行!

    0

    從PHP PDOStatement::rowCount頁面直接引用:

    PDOStatement對象:: rowCount時()返回受 最後刪除行,INSERT,或UPDATE語句由相應 PDOStatement對象執行對象的數量。

    如果由關聯的PDOStatement執行的最後一條SQL語句是 的SELECT語句,某些數據庫可能會返回該語句返回的行數 。但是,對於所有數據庫,此行爲不保證 ,不應依賴便攜式 應用程序。

    您不能在SELECT中使用rowCount。使用這個來代替:

    function isArtistKnown($id_artist){ 
        global $pdo; 
        //If you don't use prepared statements, a kitten and a puppy die somewhere 
        $isKnownQuery = $pdo->prepare("SELECT * FROM artistes WHERE IDArtiste = :ida"); 
        $isKnownQuery->bindValue(':ida', $id_artist); 
        $isKnownQuery->execute(); 
        $KnownArtiste = $isKnownQuery->fetch(PDO::FETCH_OBJ); 
        if(isset($KnownArtiste->IDArtiste)){ 
         return $KnownArtiste; 
        }else{ 
         //Actually, in this case there's no error, just no artist 
         //so i'd use 
         return null; 
         //instead of 
         //return $isKnownQuery->errorInfo(); 
        } 
    } 
    
    +0

    你是對的,準備好的陳述更好。然而,問題是一樣的:如果'last_tweet'= 0,則匹配1,如果'last_tweet'!= 0,則不匹配 當然,IdArtiste總是相同的,當我嘗試'last_tweet'的不同值時, 。 – Cyc 2014-09-30 11:40:03

    +0

    我需要查看錶格中的實際數據,因爲last_tweet在您發佈的查詢中沒有任何影響。 – 2014-09-30 11:43:30

    +0

    默認情況下,列last_tweet爲'0'或時間戳。 – Cyc 2014-09-30 11:44:33

    0

    如果你打算返回errorInfo()它會始終包含數據是否存在錯誤或沒有。您應該返回一個友好的用戶消息,指出沒有發現行(藝術家不知道你)

    function isArtistKnown($id_artist){ 
        global $pdo; 
    
        $isKnownQuery = $pdo->query("SELECT * FROM artistes WHERE IDArtiste = '$id_artist'"); 
        if ($isKnownQuery->rowCount() === 0){ 
         return false; 
        } 
        $KnownArtiste = $isKnownQuery->fetch(PDO::FETCH_OBJ); 
        return $KnownArtiste 
    } 
    

    和驗證:

    $Validate = isArtistKnown(0); 
    if ($Validate === false){ 
    echo "Artist is Not Known"; 
    }else{ 
    //Work with your data 
    } 
    
    +0

    rowCount不能與select語句一起使用。見http://php.net/manual/en/pdostatement.rowcount.php – 2014-09-30 11:39:08

    相關問題