mysql只选择一行,其中有多个id匹配

jljoyd4f  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(311)

我尝试使用mysql、php和pdo选择多个ID,如下所示:

$scheme_ids = "23,24";

// get details for all permitted schemes
$stmt = $pdo->prepare("SELECT * FROM schemes WHERE id IN(?)");
$stmt->execute([$scheme_ids]);
$schemes = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt = null;

foreach ($schemes as $scheme){
    echo $scheme['reference']."<br>";     
}

schemes表中有两个id的行,但它只选择id 23的值。结果数组不包含id 24的任何内容。
有人有什么想法吗?

5kgi1eie

5kgi1eie1#

你应该这样试试

$id= array();
//add value into array like $id[]=23; $id[]=24
//convert the array to a csv string for use with the query
$id= implode(',', $id);
$stmt = $pdo->prepare("SELECT * FROM schemes WHERE id IN(?)");
$stmt->execute($id);
$schemes = $stmt->fetchAll(PDO::FETCH_ASSOC);
bmvo0sr5

bmvo0sr52#

您可以尝试将数组定义为scheme id而不是string,请检查以下方法:

$scheme_ids = [23,24];

// get details for all permitted schemes
$stmt = $pdo->prepare("SELECT * FROM schemes WHERE id IN(?)");
$stmt->execute($scheme_ids);
$schemes = $stmt->fetchAll(PDO::FETCH_ASSOC);
$stmt = null;

foreach ($schemes as $scheme){
    echo $scheme['reference']."<br>";     
}
w8f9ii69

w8f9ii693#

从pdostatement::execute的文档中:
不能将多个值绑定到单个参数;例如,不允许将两个值绑定到in()子句中的单个命名参数。
在这种情况下不能使用语句准备;您必须将这些值连接到查询字符串中。我想 $scheme_ids 是动态地从实际应用程序中的某种用户输入中获取的,因此请确保正确地对其进行转义。

$stmt = $pdo->prepare("SELECT * FROM schemes WHERE id IN($scheme_ids)");
$stmt->execute();

相关问题