一尘不染

PDO不转义字符串引号

sql

我在使用PDO访问数据库的php脚本中遇到问题。在使用prepare()execute()在PDO中使用PDO时,似乎无法使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语法有错误;请参见表11。检查与您的MySQL服务器版本相对应的手册,以在第1行的’def’,‘123’)’附近使用正确的语法

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


阅读 178

收藏
2021-05-23

共1个答案

一尘不染

试试这个:

# 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();
2021-05-23