从数组中选择数据

时间:2017-11-05 13:49:01

标签: php arrays

如果我有这个数组:

$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行。

1 个答案:

答案 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关于准备好的查询优势的最新评论。