PHP 对数组中的多个变量运行 1 个查询

标签 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 循环中,因为它运行查询的次数与数组计数相同。

我需要做的是运行查询 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/

相关文章:

php - 无法在我的PHP脚本上上传mp3文件

php - Laravel 更新/安装 composer 包

java - MySQL - 我应该使用什么数据类型来存储 map 字段

database - SQLite WAL 在电源故障时有多安全?

java - SQLite 数据库在删除命令上锁定

php - mySQL:从两个表中获取数据,按具有唯一 ID 的日期分组

php - 如何进行查询以获取特定的帖子 ID?

php - 创建排行榜,我将如何显示排名/位置?

mysql - 更新 MySQL 不正确的语法

sql - 多列选择语句