我正在尝试通过foreach循环连接$ sql字符串,如下所示:
$sql = "select ISBN, title, price
from bookdescriptions
where ";
foreach ($bookArray as $ISBN => $qty) {
$sql .= " ISBN = $ISBN or ";
$sql = substr($sql, 0, strlen($sql)- 2);
}
其中$ ISBN,$ bookArray和$ qty都已初始化。
我正在尝试做的(这是一项作业)是检索购物车中每个ISBN的ISBN。
但是,我收到的错误是foreach参数无效。有人可以发现错误或者建议更好的解决方案吗?
答案 0 :(得分:0)
这可能无法解决您的错误,但您需要移动此行
$sql = substr($sql, 0, strlen($sql)- 2);
这样的循环:
$sql = "select ISBN, title, price
from bookdescriptions
where ";
foreach ($bookArray as $ISBN => $qty) {
$sql .= " ISBN = $ISBN or ";
}
$sql = substr($sql, 0, strlen($sql)- 2);
我猜你想要摆脱最后一个“OR”,但是通过将它包含在循环中,你在添加它之后立即删除它。您只需删除最后一次出现的OR,因为它会使SQL语句的where子句无效
答案 1 :(得分:0)
您可以使用类似
的内容$sql = "SELECT ISBN, title, price
FROM bookdescriptions
WHERE TRUE AND ";
$bookArray = array(
array('ISBN' => 123, 'QTY'=> 10),
array('ISBN' => 125, 'QTY'=> 10),
array('ISBN' => 545, 'QTY'=> 10),
array('ISBN' => 654, 'QTY'=> 10),
array('ISBN' => 846, 'QTY'=> 10)
);
$isbn = array();
foreach ($bookArray as $row) {
array_push($isbn, $row['ISBN']);
}
$isbn = implode("','", $isbn);
if ( count($isbn) > 0 ) {
$sql .= " ISBN IN( '$isbn' ) ";
}
echo $sql;