MySQL / Foreach错误

时间:2013-11-20 05:44:52

标签: php sql

我正在尝试通过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参数无效。有人可以发现错误或者建议更好的解决方案吗?

2 个答案:

答案 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;