查询语法不正确

时间:2012-05-11 20:50:58

标签: php mysql syntax-error

我正在制作购物车,我的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)

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

2 个答案:

答案 0 :(得分:2)

我认为这一行是你的问题:

您还可以简化将逗号分隔的id设置为ccKep建议的过程:

$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()将提取数组的索引并忽略这些值。如果你想要这些价值观,请坚持我的第一个建议。

答案 1 :(得分:0)

试试这个:

    $sql = "SELECT * FROM component WHERE componentID IN (";
    foreach($_SESSION['cart'] as $id => $value) {
            $some_temp_array[] = $id;
    }
    $sql .= implode(',', $some_temp_array).")";