在pdo执行中多次分配相同的参数值

时间:2016-11-18 16:05:53

标签: php mysql sql pdo prepared-statement

我最初有一个SQL语句,这个:

SELECT *, COUNT(friend_one) AS pending_count , COUNT(friend_two) AS requests_sent   
FROM friends
WHERE friend_one OR friend_two = ?
AND status = ?

我在其中分配了以下参数:

$pending_friend_count_stmt->execute(array($user_id, $status_one));

然而,查询没有得到我想要的结果。有人向我展示了一种不同的方式,但它有多次变量$user_id,所以我不知道如何调整代码以便能够使用参数。

您可以在此处查看新查询:

http://rextester.com/KSM73595

我能够做到吗

SELECT COUNT(CASE WHEN `friend_one` = ? THEN 1 END) as `requests_count`,
       COUNT(CASE WHEN `friend_two` = ? THEN 1 END) as `pending_count`
FROM `friends`
WHERE ? IN ( `friend_one` , `friend_two` )
  AND `status` = ?

$pending_friend_count_stmt->execute(array($user_id, $user_id, $user_id $status_one));

1 个答案:

答案 0 :(得分:5)

使用PDO,您可以使用命名参数,但是在您的问题中,您希望将1个参数用于多个值,这意味着必须启用仿真:

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

现在您可以执行以下操作:

$stmt = $db->prepare("SELECT * FROM table WHERE userid = :userid AND userid = :userid");

$stmt->excecute([
  ':userid' => 1
]);

导致:

"SELECT * FROM table WHERE userid = 1 AND userid = 1"