0

我目前正在制作购物车,但在下面的 SQL 查询中遇到问题:

$sql="SELECT * FROM component WHERE componentID IN (";

            foreach($_SESSION['cart'] as $id => $value) {
                $sql.=$id.",";
            }

            $sql=substr($sql, 0, -1).")";

            $query=mysql_query($sql) or die(mysql_error());

因此,我正在尝试使用 select 和 foreach 将 SESSION 项目与我的数据库项目一起检查。代码循环通过SESSION并将componentID添加到SELECT,然后将其带入substr函数以删除最后一个逗号(例如删除'001,002 * *'。我确定语法是正确的,但是我不断得到语法错误是:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“00004,00007)”附近使用正确的语法

谁能看到我在这里做错了什么?

4

2 回答 2

2

我认为这条线是你的问题:

您还可以按照 ccKep 的建议简化制作逗号分隔的 id 集的过程:

$sql .= implode(",", $_SESSION['cart']) . ")";

完整的代码如下所示:

$sql="SELECT * FROM component WHERE componentID IN (";
$sql .= implode(",", $_SESSION['cart']) . ")";

$query=mysql_query($sql) or die(mysql_error());

这将从 $_SESSION['cart'] 获取- 如果你真的想要数组的索引,就像你第一次编码它一样,有这个选项:

$sql="SELECT * FROM component WHERE componentID IN (";
$sql .= implode(",", array_keys($_SESSION['cart'])) . ")";

$query=mysql_query($sql) or die(mysql_error());

array_keys() 将提取数组的索引并忽略值。如果您想要这些值,请坚持我的第一个建议。

于 2012-05-11T20:55:16.820 回答
0

试试这个:

    $sql = "SELECT * FROM component WHERE componentID IN (";
    foreach($_SESSION['cart'] as $id => $value) {
            $some_temp_array[] = $id;
    }
    $sql .= implode(',', $some_temp_array).")";
于 2012-05-11T21:00:27.177 回答