我正在制作购物车,我的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)
谁能看到我在这里做错了什么?
答案 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).")";