使用PDO时是否必须禁用魔术引号

时间:2011-11-19 13:01:32

标签: php pdo sql-injection magic-quotes

简单的问题,我想要简单的答案。 我正在使用PDO预处理语句来确保我的数据安全地处理到数据库。 但我很困惑。如果启用magic_quotes,我是否必须禁用魔术引号或对变量使用stripslashes。然后让PDO完成安全工作?

2 个答案:

答案 0 :(得分:5)

如果您使用PDO准备好的语句将数据插入数据库,则数据将与您插入数据时完全一样进入数据库。 magic_quotes为数据添加斜杠:因此这些斜杠将出现在数据库中。这显然不是你想要的。

正如您所说,禁用魔术引号,或者,如有必要,请使用stripslashes

答案 1 :(得分:1)

第1阶段 - 查看:

您输入某人的姓名<input type="text" name="name"></input>

Stage2 - 型号:

现在您发布到模型,使用$_POST['name']获取某人的名字并编写一个sql语句:

$sql = "INSERT INTO tableName 'name' VALUES(:name)"; // Then prepare and bindParam

在使用PDO访问数据库之前,如果启用了gpc,则会转义您的sql语句。也就是说,某人的名字现在将是某人的名称。然后使用PDO访问数据库。但现在在数据库中保存了某人的名称,因为PDO不会知道单引号之前的反斜杠是由gpc添加的,而是PDO认为你故意在单引号之前添加了反斜杠。 / p>

结论:如果你使用PDO,只需关闭gpc。

相关问题