使用以下代码尝试使用分解的数组变量运行单个查询:
<?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 循环中,因为它运行查询的次数与数组计数相同。
我需要做的是运行查询 1 次,并将所有变量传递到查询中。
当我将其打印到控制台时,查询应该如下所示:
"SELECT container, date, pool FROM inventory WHERE container IN ('variable1', 'variable2', 'variable3')"
最佳答案
最简单的方法是创建一个数组,然后 implode它变成一个字符串。您似乎已经在 $containersArray
中拥有数据,因此请使用它,除非您由于某种原因需要构建另一个数组。然后像这样添加它:
$select = "SELECT container, date, pool FROM inventory WHERE container IN ('".implode("','",$containersArray."')";
请注意,这并不安全,可能会让您面临 SQL 注入(inject)和令人讨厌的引用问题。相反,使用 prepared statements ,您可以用同样的方式构建占位符。
关于PHP 对数组中的多个变量运行 1 个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44444182/