我在php中有这个mysql查询:
$sql2 = "SELECT id, nazev, poradi FROM system WHERE id IN($idIs) ORDER BY poradi";
$result2 = mysqli_query($conn, $sql2);变量$idIs是字符串'2,3‘(系统的两个ids )。当我尝试填充数组$nazevSystemu时,有两个值(因为来自$idIs的两个ids )
$i = 0;
$nazevSystemu = [];
while($row2 = mysqli_fetch_assoc($result2)) {
$nazevSystemu[$i] = $row2['nazev'];
echo $row2['nazev'];
$i++;
}回显$Row2‘nazev’的结果;:Value1Value2
我想让它更安全,avert SQl inj.,所以我使用这样的预准备语句(而不是这个页面上的前两行代码):
$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();但是现在我只得到了回显$Row2‘nazev’的结果;-只有一个值: Value1
我在准备好的语句中做错了什么?
发布于 2019-11-18 18:40:22
你必须提供所有的id作为单独的参数。所以不是IN(?)你必须写上( ?,?,?)并逐个解析每个参数。
代码示例:
$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();https://stackoverflow.com/questions/58912637
复制相似问题