2013-08-30 85 views
9

Tôi có một chức năng PDO:Giá trị trả lại khi không có hàng trong PDO

function(){ 
    $success=$this->query($query, $bindvalues); 

    return ($success == true) ? $this->stmt->fetch(PDO::FETCH_ASSOC) : false; 
} 

Khi tôi thực hiện một truy vấn chọn mà trả về một hàng (hoặc nhiều hơn), nó sẽ trở lại ví dụ:

array(1) { ["Id"]=> string(1) "1" } 

Khi truy vấn thất bại (nếu tôi có sai cú pháp chẳng hạn), nó sẽ trả về FALSE.

Nhưng nếu không tìm thấy hàng nào với truy vấn, nó cũng trả về FALSE.

Vì vậy, giá trị trả lại có lỗi trong truy vấn và không có hàng nào sẽ trả về FALSE. Làm thế nào là có thể? Tôi cần trả về FALSE chỉ khi có lỗi trong truy vấn, và tôi cần trả về NULL ví dụ khi không có kết quả. Có gì sai trong chức năng của tôi không?

Cảm ơn!

+1

Nó giúp để đọc hướng dẫn: http://php.net/manual/en/pdostatement.fetch.php#refsect1-pdostatement. fetch-returnvalues ​​ – deceze

Trả lời

13

Nếu không có hàng nào được tìm thấy PDO :: fetch returns false. Đây là sự thật. Vì vậy, thay đổi chức năng của bạn:

function(){ 
    $success = $this->query($query, $bindvalues); 
    if(!$success) { 
     //handle error 
     return false; 
    } 
    $rows = $this->stmt->fetch(PDO::FETCH_ASSOC); 
    return $rows ?: null; 
} 
+1

Anh ta muốn trả về 'null' không có kết quả ... – deceze

+0

@deceze: thx cho gợi ý. Đã thay đổi nó! –

+0

Cảm ơn bạn rất nhiều! Nó rất đơn giản, nhưng tôi không biết rằng PDO trả về sai khi không tìm thấy hàng. Tôi nghĩ rằng MySQL không? – Jordy

-1

Ở đây bạn đi

function fetchRow($query, $bindvalues) 
{ 
    $stmt = $this->query($query, $bindvalues); 
    return $stmt->fetch(); 
} 
+0

Anh ta muốn trả về một' null' khi không có hàng, không phải là 'false'. – PhoneixS

+0

@PhoneixS nó làm cho không có ý nghĩa như vậy chỉ cần bỏ một whim như vậy :) –