【问题标题】:Assigning the same parameter value multiple times in pdo execute在 pdo 执行中多次分配相同的参数值
【发布时间】:2017-04-02 13:31:09
【问题描述】:

我原来有一个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));

【问题讨论】:

  • 在输入['userid'=>$user_id] 执行时使用命名参数:userid 而不是?
  • @Xorifelse 我可以像这样把那些在执行中的人灌进去吗?执行(数组(':userid', $user_id, $status_one));
  • 更新了评论,但请记住,您不能混合使用它们,所以必须命名。
  • @Xorifelse 谢谢。我不知道你能做到这一点。随时留下答案,因为这有帮助。

标签: php mysql sql pdo prepared-statement


【解决方案1】:

使用 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"

【讨论】:

  • 再次感谢您的帮助。
  • 如果你传入一个数组作为参数,你可以使用:0:1等键
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
  • 2019-01-02
  • 1970-01-01
  • 2012-07-23
  • 2014-03-01
  • 1970-01-01
相关资源
最近更新 更多