php - PDO 和 MySQL 的这种实现是否安全以防止 SQL 注入(inject)?

标签 php mysql pdo

我一直在研究 PHP 扩展的 PDO 风格,以安全的方式进行 MySQL 查询。我想知道我是否已经正确地做到了这一点,我可以相信它对 MySQL 注入(inject)等是安全的?任何确认或更正将不胜感激!

<?php
$nametosearch=$_POST['nametosearch'];// Is "Billy"

$db = new PDO('mysql:host='.HOST.'; dbname='.DBNAME, DBUSER, DBPASSWORD);//the all caps are PHP constants.

$query =  "SELECT * FROM ".DBNAME.".sometable WHERE username=".$db->quote($nametosearch)." ORDER BY lastname ASC;";

$result = $db->query($query);

while($row = $result->fetch(PDO::FETCH_ASSOC)) {
                    //Do some stuff with results
                }

$result->closeCursor();
$db = null;
?>

最佳答案

这种构建查询的方式不好,为了安全起见,您应该使用准备好的语句:

<?php
$nametosearch=$_POST['nametosearch'];// Is "Billy"

$db = new PDO('mysql:host='.HOST.'; dbname='.DBNAME, DBUSER, DBPASSWORD);//the all caps are PHP constants.

$statement = $db->prepare("SELECT * FROM ".DBNAME.".sometable WHERE username=":username" ORDER BY lastname ASC;");

$statement->execute(array(':username', $nametosearch));

//....
?>

这是使用 PDO 进行数据库查询的安全方式。

关于php - PDO 和 MySQL 的这种实现是否安全以防止 SQL 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33308311/

相关文章:

php - 除了导航栏之外,什么会导致 WordPress 管理屏幕空白?

mysql - 是否可以向现有数据库表添加新的唯一索引?

php - Next、Prev 以及之间的数字

php - 将多维数组减少为查询字符串

php - 当我从数据库中选择所有行时,PDO 'too many connections'

php - mysql中基于列ID的行名

php - session 如何工作?

javascript - 从同一页面、同一类的特定表单中获取提交

javascript - 购物车数据未使用 Ajax 更新

java - 每次都检查数组还是插入数据库哪个更快?