我正在尝试遍历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
吗?如果是这样,那会怎么样?
答案 0 :(得分:2)
您应该使用预先准备好的声明,但这里有问题:
$query = $db->query("SELECT * FROM tblStockDet WHERE `$arg_string`");
^ ^
这些字符将成为查询字符串的一部分。反引号将导致您的查询完全失败,这是您现在遇到的问题。反引号用于表格和列名称等标识符。
我认为{ ... }
卷曲引号是有意的,因为您似乎也在工作查询中使用它们。如果没有,你应该删除它们。
答案 1 :(得分:0)
我发现了2个错误:
从查询字符串中删除{
}
。
所以改变这个:
$arg_string .= "&& StockMastID LIKE '%{".$value."}%' ";
到此:
$arg_string .= "&& StockMastID LIKE '%".$value."%' ";
不必要的'
语录:
改变这个:
"SELECT * FROM tblStockDet WHERE `$arg_string`"
到此:
"SELECT * FROM tblStockDet WHERE $arg_string"