Php 通过数组循环创建mysqli查询

Php 通过数组循环创建mysqli查询,php,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 &&

我正在尝试循环通过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}%'");
这不起作用,因为我遇到了一个
致命错误:在执行查询时,对非对象调用成员函数fetch_assoc()时出现了一个
错误。如果我手动键入而不是使用循环,则查询执行得很好,因此
foreach
语法中肯定有错误,或者查询中的
$arg\u string
周围有引号或勾号,但我无法确定它是什么

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

我发现了两个错误:

  • 从查询字符串中删除
    {
    }

    因此,改变这一点:

    $arg_string .= "&& StockMastID LIKE '%{".$value."}%' ";
    
    "SELECT * FROM tblStockDet WHERE `$arg_string`"
    
    为此:

    $arg_string .= "&& StockMastID LIKE '%".$value."%' ";
    
    "SELECT * FROM tblStockDet WHERE $arg_string"
    
  • 不必要的
    引号:

    更改此项:

    $arg_string .= "&& StockMastID LIKE '%{".$value."}%' ";
    
    "SELECT * FROM tblStockDet WHERE `$arg_string`"
    
    为此:

    $arg_string .= "&& StockMastID LIKE '%".$value."%' ";
    
    "SELECT * FROM tblStockDet WHERE $arg_string"
    

  • 你真的应该使用事先准备好的陈述,但这里有一个问题:

    $query = $db->query("SELECT * FROM tblStockDet WHERE `$arg_string`");
                                                         ^           ^
    
    这些字符将成为查询字符串的一部分。反勾号将导致您的查询完全失败,这就是您现在遇到的问题。反勾号表示表名和列名等标识符

    我假设
    {…}
    卷曲引号是有意的,因为您的工作查询中似乎也有它们。如果没有,您应该删除它们