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

Php PDO和转义输入:这是最安全的方法吗?,php,mysql,pdo,sql-injection,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(':idtoapp

我想在上线前检查一下自己。我在互联网上读了很多不同的东西,但我想知道这是否绝对能保护我的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";

这里不需要
mysql\u real\u escape\u string
,实际上,它完全错了(它来自另一个不推荐使用的数据库库),可能会损坏您的数据。(同样,在这里它也是无效的-
mysql\u real\u escape\u string()
是用于转义字符串的,它对整数没有用处。)


PDO准备好的语句就足够了。

这里不需要
mysql\u real\u escape\u string
,实际上,它完全错误(它来自不同的、不推荐使用的数据库库),可能会损坏您的数据。(同样,在这里它也是无效的-
mysql\u real\u escape\u string()
是用于转义字符串的,它对整数没有用处。)


PDO准备好的语句就足够了。

您甚至可以检查是否确实收到了ID,因此INT>0。进一步解释一下,
mysql\u real\u escape\u string
如果没有通过
ext/mysql
API的活动数据库连接,OP不太可能有这样的连接,
mysql\u real\u escape\u string
将无法正常工作。使用它还将两次转义数据。您甚至可以检查是否真的收到ID,因此INT>0。只是进一步解释一下,
mysql\u real\u escape\u string
如果没有通过
ext/mysql
API的活动数据库连接,OP不太可能会正常工作。使用它还将两次转义数据。