首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP Mysql预准备语句不同的结果

PHP Mysql预准备语句不同的结果
EN

Stack Overflow用户
提问于 2019-11-18 18:37:00
回答 1查看 73关注 0票数 1

我在php中有这个mysql查询:

代码语言:javascript
复制
$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 )

代码语言:javascript
复制
$i = 0;
$nazevSystemu = [];
while($row2 = mysqli_fetch_assoc($result2)) {
  $nazevSystemu[$i] = $row2['nazev'];
  echo $row2['nazev'];
  $i++;
}

回显$Row2‘nazev’的结果;:Value1Value2

我想让它更安全,avert SQl inj.,所以我使用这样的预准备语句(而不是这个页面上的前两行代码):

代码语言:javascript
复制
$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

我在准备好的语句中做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2019-11-18 18:40:22

你必须提供所有的id作为单独的参数。所以不是IN(?)你必须写上( ?,?,?)并逐个解析每个参数。

代码示例:

代码语言:javascript
复制
$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();
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58912637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档