语句适用于SQL,但不适用于PDO

时间:2014-02-18 22:36:28

标签: mysql 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");
                }

1 个答案:

答案 0 :(得分:0)

在这种情况下,

PDO::fetch()会返回arrayfalse。您不希望将获取结果显式地与整数1进行比较,然后将其分配给变量 - 它始终为true,因为1 !== array()始终为true,1 !== false为总是如此。

相反,您应该看看结果集是否为空或false

请改为尝试:

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