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()只将文本查询发送到服务器,而不进行任何处理(本质上)。我不知道,这就是为什么我要问的原因。为什么人们在这个网站上投票时这么不开心?:)天哪。。。