Php 用PDO编制报表;与其他形式的SQL插入相比有什么好处?

Php 用PDO编制报表;与其他形式的SQL插入相比有什么好处?,php,sql,pdo,Php,Sql,Pdo,我在学校里学会了通过$\u POSTed表单数据将数据插入SQL $title = mysql_escape_string($_POST["newstitle"]); $body = mysql_escape_string($_POST["newsbody"]); $addnews = $db->query(" INSERT INTO news VALUES (CURRENT_DATE, '$body', '$title', '') "); 然而,最近我被告知我应

我在学校里学会了通过
$\u POST
ed表单数据将数据插入SQL

$title = mysql_escape_string($_POST["newstitle"]);
$body = mysql_escape_string($_POST["newsbody"]);
$addnews = $db->query("
    INSERT INTO news
        VALUES (CURRENT_DATE, '$body', '$title', '')
");
然而,最近我被告知我应该使用以下内容:

$addnews = $db->prepare("
    INSERT INTO news
        VALUES (CURRENT_DATE, :body, :title, '')
");
$addnews->execute(array(
    ':body' => $_POST["newsbody"],
    ':title' => $_POST["newstitle"]));

第二段代码有什么好处?我的教授在前面提到的课程中非常传统,我想他是在教授一种古老的做事方式。他确实使用了很多PDO,但从未使用过上面的例子。是的,我知道
mysql\u escape\u string()
不受欢迎,但我就是这样被教导的。我正在努力改变我的方法,使之更适合当前的趋势。

你的问题很容易回答

我希望您理解,任何值都必须正确格式化才能放入SQL查询。准备好的声明也是如此。与*_escape_字符串不同,它只执行部分格式设置,准备好的语句旨在执行完整格式设置。而就在必须这样做的地方——不早,不晚——所以它让人无法忘记。这就是重点


你只需要理解格式化和转义之间的区别,这是任何教授都无法理解的

准备好的发言。另一个易受sql注入攻击。请参阅您以前应该使用的was
mysql\u REAL\u escape\u string()
。准备好的语句(带有绑定参数!)更方便。增加的安全性只是容易忘记的转义(或使用错误的函数)的副产品。正如您所知,
mysql\u*
可能的重复已经被弃用,而其替代者
mysqli
已经准备好了声明。所以没有理由不使用它们。