循环遍历数组以创建mysqli查询

时间:2015-06-12 15:58:15

标签: php

我正在尝试遍历PHP数组来构建我的查询:

$args = array("this", "that", "other");

$arg_string = '';

foreach ($args as $key => $value) {
    $arg_string .= "&& StockMastID LIKE '%{".$value."}%' ";
}

$arg_string = substr($arg_string, 3); // Remove && from first $args

$query = $db->query("SELECT * FROM tblStockDet WHERE `$arg_string`");

因此,从理论上讲,查询现在应该是:

$query = $db->query("SELECT * FROM tblStockDet WHERE StockMastID LIKE '%{this}%' && StockMastID LIKE '%{that}%' && StockMastID LIKE '%{other}%'");

这不起作用,因为我在执行查询时遇到Fatal error: Call to a member function fetch_assoc() on a non-object错误。如果我手动输入而不是使用循环,则查询执行正常,因此必须在foreach语法中出现错误,或者在查询中有$arg_string左右的引号或标记,但是我无法弄清楚它是什么。

注意:或者,我应该放弃这个并转而使用REGEXP吗?如果是这样,那会怎么样?

2 个答案:

答案 0 :(得分:2)

您应该使用预先准备好的声明,但这里有问题:

$query = $db->query("SELECT * FROM tblStockDet WHERE `$arg_string`");
                                                     ^           ^

这些字符将成为查询字符串的一部分。反引号将导致您的查询完全失败,这是您现在遇到的问题。反引号用于表格和列名称等标识符。

我认为{ ... }卷曲引号是有意的,因为您似乎也在工作查询中使用它们。如果没有,你应该删除它们。

答案 1 :(得分:0)

我发现了2个错误:

  1. 从查询字符串中删除{ }

    所以改变这个:

    $arg_string .= "&& StockMastID LIKE '%{".$value."}%' ";
    

    到此:

    $arg_string .= "&& StockMastID LIKE '%".$value."%' ";
    
  2. 不必要的'语录:

    改变这个:

    "SELECT * FROM tblStockDet WHERE `$arg_string`"
    

    到此:

    "SELECT * FROM tblStockDet WHERE $arg_string"