Php 这是通过PDO使用SELECT的安全方法吗
可能重复:Php 这是通过PDO使用SELECT的安全方法吗,php,mysql,pdo,Php,Mysql,Pdo,可能重复: 我正在通过$\u GET获取id。我刚开始使用PDO,我不确定这是否安全。显然,下面的代码使用$\u GET获取id。在将其放入查询之前,我根本没有对其进行清理。这安全吗 <?php if (isset($_GET['id'])) { $blogid = $_GET['id']; $post = $dbh->query("SELECT id, title, slug, body, image, author, date, category from blog WH
我正在通过
$\u GET
获取id。我刚开始使用PDO,我不确定这是否安全。显然,下面的代码使用$\u GET
获取id。在将其放入查询之前,我根本没有对其进行清理。这安全吗
<?php
if (isset($_GET['id'])) {
$blogid = $_GET['id'];
$post = $dbh->query("SELECT id, title, slug, body, image, author, date, category from blog WHERE id='$blogid' ORDER BY date DESC");
$row = $post->fetch(); ?>
在将其放入查询之前,我根本没有对其进行消毒
没有。一点也不安全。:)
您要么需要转义它,要么使用预先准备好的语句。对于PDO,我将使用准备好的声明:
if (isset($_GET['id']) && is_string($_GET['id'])) {
$blogid = $_GET['id'];
$stmt = $dbh->prepare("SELECT id, title, slug, body, image, author, date, category from blog WHERE id= :id ORDER BY date DESC");
$stmt->execute(array('id' => $_GET['id']));
$row = $stmt->fetch();
}
在SQL查询中插入变量而不进行清理/转义是绝对安全的
如果您自己不想逃避,您可以使用prepare
语句和bind
参数
您可以查看PHP文档
关于如何使用PDO准备:
如何使用参数绑定:
好吧,我误解了PDO是如何处理的。我想$post=$dbh->query
会清理这个问题。它是如何做到的?那将是相当痛苦的字符串操作。query()只将文本查询发送到服务器,而不进行任何处理(本质上)。我不知道,这就是为什么我要问的原因。为什么人们在这个网站上投票时这么不开心?:)天哪。。。