PHP - 在 foreach 循环中向 SQL 语句添加新的 WHERE 子句

泰勒·瓦茨

我有一个复选框过滤器,可以在其中“选中”多个选项。一旦它们被检查,它们就会被存储在一个 JavaScript 数组中并通过 ajax 传递给 php 文件。从那里,我尝试执行 foreach 循环来获取数组中的每个元素,并为每个元素的 SQL 语句添加一个新的 where 条件,然后运行查询。

JavaScript

var vendors = [];

function filterResults($this)
{
  var vendor = $($this).attr('data-id');
  if($($this).prop('checked'))
  {
    var action = 'add';
    vendors.push(vendor);
  }
  else
  {
    var action = 'remove';
    var index = vendors.indexOf(vendor);
    if(index >= 0)
    {
        vendors.splice(index, 1);
    }
}

运行的 PHP 脚本 (filter-results.php)

if(is_array($_POST['vendors']))
{
   $collaterals = $vendor->updateResults($_POST['vendors']);
   var_dump($collaterals);

   foreach($collaterals as $col)
   {
     include '../parts/item.php';
   }
}

包含 foreach 循环的 PHP 函数

public function updateResults($vendors)
{
    try
    {   
        $items = array();
        $sql = "SELECT * FROM collaterals WHERE ";
        foreach ($vendors as $ven)
        {
            echo $ven;
            $sql .= "vendor = ".$ven." OR ";
        }

        $stmt = $this->db->prepare($sql);
        $stmt->execute();

        while($row = $stmt->fetchObject())
        {
            $items[] = $row;
        }

        return $items;

    }
    catch(Exception $e)
    {
        $e->getMessage();
    }
}

PHP 函数中的“echo”正在运行,但 var_dump() 正在变成“NULL”,这意味着 SQL 语句中某处存在错误。

任何帮助将不胜感激。谢谢!

您可以不foreach循环地运行查询,如下所示

 $sql = "SELECT * FROM collaterals WHERE vendor IN ('".implode("','",$vendors)."')";

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章