我在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()
方法,但使用引号相同的问题。
我真的不明白,这令人沮丧。谢谢你的帮助。
答案 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