我正尝试使用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>";
}
方案表中的两个ID都有行,但它仅选择ID 23的值。结果数组不包含ID 24的任何内容。
有人有什么想法吗?
答案 0 :(得分:2)
您应该尝试这种方式
$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);
答案 1 :(得分:1)
您可以尝试通过将数组定义为方案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>";
}
答案 2 :(得分:1)
摘自PDOStatement::execute的文档:
多个值不能绑定到单个参数;例如,不允许在IN()子句中将两个值绑定到单个命名参数。
在这种情况下,您不能使用语句准备;您必须将这些值连接到查询字符串中。我假设$scheme_ids
是动态地从真实应用程序中的某种用户输入中获取的,因此请确保对其进行正确的转义。
$stmt = $pdo->prepare("SELECT * FROM schemes WHERE id IN($scheme_ids)");
$stmt->execute();