2014-02-18 139 views
0

我正在將SQL從SQL轉換爲PDO,並且一切進展順利,直到此聲明爲止。聲明適用於SQL,但不適用於PDO

我的SQL做它應該和不輸出消息「此用戶沒有私人圖像」。但出於某種原因,當轉換到PDO時,不應該顯示相同的消息。

任何想法?

原始SQL:

$result = mysql_query("SELECT * FROM tbl_private_photos WHERE profile = $usernum AND photo_deleted != 'Yes' LIMIT 1"); 
    if (mysql_num_rows($result)!==1) { die("This user has no private images");} 

我PDO:

$sql = "SELECT * FROM tbl_private_photos WHERE profile = :usernum AND photo_deleted != 'Yes' LIMIT 1"; 

     $q = $conn->prepare($sql); // the default way of PDO to manage errors is quite the same as `or die()` so no need for that 
     $q->bindValue(':usernum',$usernum,PDO::PARAM_INT); 
     $q->execute(); 

      if($r = $q->fetch(PDO::FETCH_ASSOC)!==1) 
      { 
       die("This user has no private images"); 
       } 

回答

0

PDO::fetch()在這種情況下arrayfalse回報。您不希望將讀取結果明確地與整數1進行比較,然後將其分配給變量 - 它始終爲true,因爲1 !== array()始終爲真,並且1 !== false始終爲真。

相反,您應該看看您的結果集是空的還是false

試試這個:

$r = $q->fetch(PDO::FETCH_ASSOC); 
if(empty($r)) 
{ 
    die("This user has no private images"); 
} 
+0

當然,它仍然不過工作,因爲我已經使用「限制1」,以確保它的工作。是否有1個或10個結果,它應該堅持1 –

+2

@ElaineAdams!==與整數1比較,沒有鑄造或類似的東西。 'fetch'不返回整數。然後你將它分配給$ r,這可能會永遠評估爲'true',如果你認爲我的更新是 – Ray

+0

@ElaineAdams,看看它是否清晰 – Ray

相關問題