PDO不转义字符串引号

时间:2012-03-12 20:32:28

标签: php sql database pdo

我在php脚本中遇到问题,我使用PDO访问我的数据库。当我在PDO中使用prepare()execute()时,我似乎无法让PDO逃脱我的字符串。我看了一遍,我还没有找到这个问题的答案,因为我看到的每个地方都说PDO会自动逃脱字符串。 这是我的代码:

$statement = $db->prepare("INSERT INTO Table (ID, Column1, Column2) VALUES (NULL, '$var1', '$var2')");
$query->execute();

我们承认$var1 = "abc'def"$var2 = "123"问题是我收到错误消息,因为报价没有转义。

  

错误:SQLSTATE [42000]:语法错误或访问冲突:1064您   您的SQL语法有错误;检查对应的手册   您的MySQL服务器版本,以便在'def'附近使用正确的语法,   '123')'在第1行

我也尝试过使用query()方法,但使用引号相同的问题。 我真的不明白,这令人沮丧。谢谢你的帮助。

3 个答案:

答案 0 :(得分:13)

试试这个:

# Took out ID, as it should be auto_increment and handled by database
$statement = $db->prepare("INSERT INTO Table (Column1, Column2) VALUES (:col1, :col2)");

$statement->bindValue(':col1', $var1, PDO::PARAM_STR);
$statement->bindValue(':col2', $var2, PDO::PARAM_INT);

$statement->execute();

答案 1 :(得分:2)

请查看PDO库的bindParam()方法。

这使您的查询如下所示:

$statement = $db->prepare("INSERT INTO Table (ID, Column1, Column2) VALUES (NULL, ?, ?)");
$statement->bindParam(1, $var1, PDO::PARAM_STR);
$statement->bindParam(2, $var2, PDO::PARAM_INT);

$query->execute();

//我真的应该加载新的答案:)当酒吧说有。

答案 2 :(得分:0)

为此目的有一个功能。看看www.php.net/addslashes