PDO显示错误

时间:2014-03-06 20:55:45

标签: php mysql pdo

我在下面有一个查询,我之前使用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);

2 个答案:

答案 0 :(得分:4)

你错过了“添加”字符串:

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

答案 1 :(得分:3)

在PDO标签(info)中,您将找到PDO Prepared语句和IN的正确过程。

PDO Tag

以下代码使用此方法从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);

DEMO