2014-02-18 107 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

相关问题