php - 在 pdo execute 中多次分配相同的参数值

标签 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));

最佳答案

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

关于php - 在 pdo execute 中多次分配相同的参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40681463/

相关文章:

mysql子查询只返回一行

PHP 比较和更改多维数组中的某些元素

javascript - 如何使用 AJAX 将数据发布到 php 文件

Mysql获取组的最后一个元素

mysql - SQL 存储过程字符串搜索通过传递的参数和使用 'LIKE' 查询

sql - Postgresql的子串表达式

php - 将 date.timezone 设置为 "date.timezone => no value => no value"后获取 "Europe/Paris"

php - $_SESSION 仅适用于 website.com,不适用于 www.website.com

mysql - 如何使用MySQL从max(datetime)中获取相应的值?

php - 在PHP中正确显示MYSQL的结果