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
已经准备好了声明。所以没有理由不使用它们。