如果我有这个数组:
$ids = [1, 34, 36];
如何使用此查询从每个ID中获取表中的数据:
$query = $DB->Prepare('SELECT name, address FROM tContacts WHERE id = ?');
我尝试使用:
foreach ($ids AS $val) {
$query = $DB->Prepare('SELECT name, address FROM tContacts WHERE id = ?');
$rs = $DB->Execute($query, array($val));
$i = 0;
foreach($rs as $rows)
{
$rs[$i++]=array(
'name' => $rows['name'],
'address' => $rows['address']
);
}
}
当我试图:
print_r($rs);
它只显示最后一行,而不是我想要的3行。
答案 0 :(得分:3)
您应该在SQL条件中使用IN函数。 将它与php函数结合使用,重复占位符N次,其中N是数组中请求的ID量。
$count = count($ids);
$query = "SELECT name, address FROM tContacts WHERE id IN(".str_repeat('?,',$count-1)."?)"; //would output: IN(?,?,?)
最初我使用过str_repeat,但是@pokeybit提出了一个使用连接的想法,这样更舒服。
如果基于用户的输入建立$ ids数组,那么最好使用查询准备机制并使用占位符。
...
</ul>
<form class="form-inline">
<input class="form-control mr-sm-2 search-input" type="search" placeholder="Zoeken..." name="search" id="search">
<button class="btn btn-search my-2 my-sm-0 " type="submit">
<i class="fa fa-search"></i>
</button>
</form>
<ul class="navbar-nav">
...
然后,使用循环绑定数组中的相关ID。
注1:这两个想法都有效,一个是开发人员设置数组,另一个是使用准备查询和绑定的优势,这是一个更好的解决方案,如果数组&# 39; s在动态/基于输入。因此,我已经写了两个解决方案。
注2:请参阅@JaredFarrish关于准备好的查询优势的最新评论。