我是否需要转义数据库输入?

Joh*_*ith 6 php database validation post pdo

我在PDO中读到,如果你使用prepare并在execute中传递变量,则不需要转义变量:

$st = $dbh->prepare("INSERT INTO mytable (name,email) VALUES (?,?)");
$st->execute(array($_POST['name'], $_POST['email']));
Run Code Online (Sandbox Code Playgroud)

这是真的吗?

或者我还需要在那里用$ _POST做些什么吗?

Mar*_*c B 5

在准备好的语句中,不需要转义(并且自行转义会导致双重转义,导致转义数据被写入数据库).

但是,PDO编写的语句无法处理所有查询变体,有时您必须将"外部"数据直接插入查询字符串,这意味着您将负责正确地转义它.特别是,无法使用预准备语句指定表和/或字段名称更改的动态查询.例如

SELECT ? FROM ? WHERE ?=?
Run Code Online (Sandbox Code Playgroud)

无法做到.只能使用占位符指定值.