PHP对数组

时间:2017-06-08 19:34:08

标签: php mysql sqlite

使用以下代码尝试使用爆炸数组变量运行单个查询:

 <?php
 $containers = $_POST['cntnum'];
 $containersArray = preg_replace('/\n$/','',preg_replace('/^\n/','',preg_replace('/[\r\n]+/',"\n",$containers)));
 $count = count($containersArray);

 for($i = 0; $i < $count; $i++)
 {
   $container = $containersArray[$i];
   $cntFixed = "'".$container."',";
 }

 $select = "SELECT container, date, pool FROM inventory WHERE container IN (".$ctnFixed.")";

 $query = mysqli_query($dbc, $select) or die(mysqli_error());

 ?>

当我将$ cntFixed传递给查询时。我没有得到数组中的所有变量。相反,我只得到带有结尾逗号的最后一个变量,如我在此处打印到控制台时所示:

  "SELECT container, date, pool FROM inventory WHERE container IN ('variable3',)"

当然,结束逗号会抛出查询,所以我需要考虑到这一点。

我无法将查询放入for循环中,因为查询运行查询的次数与数组计数相同。

我需要做的是使用传递给查询的所有变量运行查询一次。

当我将其打印到控制台时,查询应如下所示:

 "SELECT container, date, pool FROM inventory WHERE container IN ('variable1', 'variable2', 'variable3')"

2 个答案:

答案 0 :(得分:2)

最简单的方法是创建一个数组,然后将implode创建为一个字符串。您似乎已经在$containersArray中拥有了数据,因此请使用它,除非您出于某种原因需要构建另一个数组。然后像这样添加:

 $select = "SELECT container, date, pool FROM inventory WHERE container IN ('".implode("','",$containersArray."')";

请注意这不安全,可以打开SQL注入和讨厌的引用问题。相反,使用prepared statements,您可以以相同的方式构建占位符。

答案 1 :(得分:0)

您必须使用<div class="header"> <ul class="nav nav-pills justify-content-end"> <li class="active"><a data-toggle="pill" class="nav-link active" href="#">About</a></li> <li> <a data-toggle="pill" class="nav-link" href="#">Portfolio</a></li> <li><a data-toggle="pill" class="nav-link" href="#">Contact</a></li> </ul> </div>运算符

这里的PHP文档: http://php.net/manual/en/language.operators.assignment.php

然后记得删除最后一个.=