我在下面有一个查询,我之前使用mysql_query并且它正确执行..但是使用PDO它显示出一些错误
致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在第1行'''附近使用正确的语法
这是我的mysql_query代码:
$sql1 = "SELECT * FROM product WHERE id IN (";
foreach($_SESSION['cart'] as $id => $value){
$sql1 .= $id.',';
}
$sql1 = substr($sql1, 0, -1) .")";
$query = mysql_query($sql1);
在没有准备声明的情况下使用PDO ..:
$sql1 = "SELECT * FROM product WHERE id IN (";
foreach($_SESSION['cart'] as $id => $value){
$sql1 .= $id.',';
}
$sql1 = substr($sql1, 0, -1) .")";
$query = $db->query($sql1);
答案 0 :(得分:4)
你错过了“添加”字符串:
$sql1 = substr($sql1, 0, -1);
$sql1 .= ")";
答案 1 :(得分:3)
在PDO标签(info)中,您将找到PDO Prepared语句和IN的正确过程。
以下代码使用此方法从SESSION数组中添加未命名的占位符
$in = str_repeat('?,', count($_SESSION['cart']) - 1) . '?';
$sql1 = "SELECT * FROM product WHERE id IN ($in)";
$params = $_SESSION['cart'] ;
$stmt = $dbh->prepare($sql1);
$stmt->execute($params);