Php 通过数组循环创建mysqli查询
我正在尝试循环通过PHP数组来构建我的查询: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 &&
$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`");
^ ^
这些字符将成为查询字符串的一部分。反勾号将导致您的查询完全失败,这就是您现在遇到的问题。反勾号表示表名和列名等标识符
我假设{…}
卷曲引号是有意的,因为您的工作查询中似乎也有它们。如果没有,您应该删除它们