繁体   English   中英

遍历数组以创建mysqli查询

[英]Looping through array to create mysqli query

我试图遍历一个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执行查询时Fatal error: Call to a member function fetch_assoc() on a non-object错误Fatal error: Call to a member function fetch_assoc() on a non-object 如果我手动键入查询而不是使用循环,则查询执行良好,因此在foreach语法中必须存在错误,或者查询中$arg_string周围带有引号或滴答的东西,但我无法弄清楚是什么它是。

注意:或者,我应该放弃此方法,而是使用REGEXP吗? 如果是这样,那看起来如何?

您确实应该使用准备好的语句,但是这里有一个问题:

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

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

我假设{ ... }弯引号是有意的,因为您似乎也在工作查询中也使用了它们。 如果不是,则应将其删除。

我发现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" 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM