PDO和转义输入:这是最安全的方式吗?

use*_*601 0 php mysql pdo sql-injection

我想在上线之前检查自己.我在互联网上阅读了很多不同的东西,但我想知道这是否绝对保护我的SQL注入代码.如果没有,我需要添加或带走什么?

$idtoapprove = mysql_real_escape_string($_POST['idtoapprove']);

$getcity = $conn->prepare('SELECT city, state FROM needs WHERE ID=:idtoapprove');
$getcity->bindParam(':idtoapprove', $idtoapprove);
$getcity->execute();

$cityrow = $getcity->fetch();
$needcity = $cityrow['city'];
$needstate = $cityrow['state'];

echo "$needcity, $needstate";
Run Code Online (Sandbox Code Playgroud)

Pek*_*ica 5

不需要在mysql_real_escape_string这里,实际上,它是完全错误的(它来自不同的,已弃用的数据库库)并且可能会损坏您的数据.(而且,无论如何它在这里都是无效的 - mysql_real_escape_string()对于转义字符串,它对于整数来说是没用的.)

PDO准备好的声明就足够了.

  • 只是为了进一步解释,如果没有活动的数据库连接,`mysql_real_escape_string`将无法正常工作,通过`ext/mysql` API,OP不太可能.使用它也会两次逃避数据. (2认同)