PHP Mysql编写的语句结果不同

PHP Mysql编写的语句结果不同,php,mysql,Php,Mysql,我有一个php中的mysql查询: $sql2 = "SELECT id, nazev, poradi FROM system WHERE id IN($idIs) ORDER BY poradi"; $result2 = mysqli_query($conn, $sql2); 变量$idIs是字符串“2,3”(系统的两个ID)。 当我尝试填充数组$nazevSystemu时,有两个值(因为$idIs中有两个ID) echo$row2['nazev']的结果;: 价值1价值2 我想让它更安全,

我有一个php中的mysql查询:

$sql2 = "SELECT id, nazev, poradi FROM system WHERE id IN($idIs) ORDER BY poradi";
$result2 = mysqli_query($conn, $sql2);
变量$idIs是字符串“2,3”(系统的两个ID)。 当我尝试填充数组$nazevSystemu时,有两个值(因为$idIs中有两个ID)

echo$row2['nazev']的结果;: 价值1价值2

我想让它更安全,避免SQl inj.,所以我使用这样的预处理语句(而不是本页的前两行代码):

但现在我只得到了echo$row2['nazev']的结果;-只有一个值: 价值1


我在准备好的声明中做错了什么?

您必须提供所有id作为单个参数。 因此,您不必在(?)中写入(?,?)并单独解析每个参数

代码示例:

$ids = explode(',', $idIs);
$stmt2 = $conn->prepare("SELECT id, nazev, poradi FROM system WHERE id IN(".trim(str_repeat('?,', count($ids)), ',').") ORDER BY poradi");
foreach ($ids as $id) {
   $stmt2->bind_param("i", $id);
}
$stmt2->execute();
$result2 = $stmt2->get_result();

我不能那样做。我不知道会有多少ID…你可以自动分割ID。因此,将$idIs变量分解成一个数组(使用explode()函数),然后自动填充问号。类似于
('.trim(str_repeat('?,',count($ids)),',')。
。我现在在原始答案中添加了一个代码示例。已经用逗号分隔了,请在他的问题中检查这一行:变量$idIs包含字符串“2,3”(系统的两个ID)。当我尝试填充数组$nazevSystemu时,有两个值(因为$idIs中有两个ID),它仍然不起作用,相同的错误。别说了,反正他们已经结束了这个问题。感谢4试图帮助……:)检查复本的第二部分接受答案。这是一个很好的例子,说明了如何在
WHERE-in()
子句中动态绑定参数
$stmt2 = $conn->prepare("SELECT id, nazev, poradi FROM system WHERE id IN(?) ORDER BY poradi");
$stmt2->bind_param("s", $idIs);
$stmt2->execute();
$result2 = $stmt2->get_result();
$ids = explode(',', $idIs);
$stmt2 = $conn->prepare("SELECT id, nazev, poradi FROM system WHERE id IN(".trim(str_repeat('?,', count($ids)), ',').") ORDER BY poradi");
foreach ($ids as $id) {
   $stmt2->bind_param("i", $id);
}
$stmt2->execute();
$result2 = $stmt2->get_result();