Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO安全选择_Php_Pdo_While Loop_Prepare - Fatal编程技术网

Php PDO安全选择

Php PDO安全选择,php,pdo,while-loop,prepare,Php,Pdo,While Loop,Prepare,我正在使用此代码段从数据库中读取数据,这是我尝试的: $sth = $dbh->prepare("SELECT * FROM user"); $sth->execute(); while ($user = $sth->fetch(PDO::FETCH_NUM)) { echo htmlspecialchars($user[1]); } 我希望它不能被入侵使用注射等 你认为这足够好,我是说我用准备好的陈述和 htmlspecialchars() 我忘了什么吗?您显示的

我正在使用此代码段从数据库中读取数据,这是我尝试的:

$sth = $dbh->prepare("SELECT * FROM user");
$sth->execute();

while ($user = $sth->fetch(PDO::FETCH_NUM)) {
    echo htmlspecialchars($user[1]);
}
我希望它不能被入侵使用注射等

你认为这足够好,我是说我用准备好的陈述和

htmlspecialchars()


我忘了什么吗?

您显示的代码部分没有直接的漏洞,因为您没有评估数据库查询中的任何用户输入,因此这不是问题。

$dbh->prepare()
已经为您进行了转义。有一个PDO函数
PDO::quote()
可以独立于prepare方法来转义字符串,但正如文档所说:

如果您使用此函数构建SQL语句,则 强烈建议使用PDO::prepare()来准备SQL语句 使用绑定参数,而不是使用PDO::quote()进行插值 用户输入到SQL语句中。有约束力的准备好的陈述 参数不仅更便于携带,更方便,对SQL免疫 注入,但执行速度通常比插值快得多 查询,因为服务器端和客户端都可以缓存已编译的表单 查询的最后一步


从数据库打印内容时,不需要使用
htmlspecialchars()
。逃逸的目的是预防,正如你正确指出的那样。但是这些注入只能在sql语句中发生,并且只有在以下情况下(如Ohgodwhy所述)来自
$\u POST
$\u GET
的用户输入或用户可以操作的任何内容都是您的查询的一部分。

此问题似乎与主题无关,因为它属于codereview.stackexchange.comi看了一下:但可能我忘了什么,那么你怎么看呢?
SELECT*
是否足够开放资源消费者和注射改进剂:D