我在学校里学到了类似下面的内容,通过$_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_escape_string()
已被弃用,但这就是我的教学方式。我正在努力改变我的方法以更适合当前的趋势。
答案 0 :(得分:0)
您的问题可以轻松解答。
我希望你明白,无论什么价值都必须正确格式化,以便放入SQL查询。如此准备的声明呢。与* _escape_string不同,后者仅执行部分格式化,准备好的语句用于执行完整。而且必须在哪里完成 - 不是更早,不是更晚 - 所以它让人无法忘记。这才是重点。
你只需要理解格式化和转义之间的区别,这是教授从未理解过的。