MySQL只选择有多个ID匹配的一行

时间:2018-08-20 10:07:28

标签: php mysql pdo

我正尝试使用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的任何内容。

有人有什么想法吗?

3 个答案:

答案 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();