PDO中的准备陈述;比其他形式的SQL插入更受益?

时间:2013-09-01 00:29:30

标签: php sql pdo

我在学校里学到了类似下面的内容,通过$_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()已被弃用,但这就是我的教学方式。我正在努力改变我的方法以更适合当前的趋势。

1 个答案:

答案 0 :(得分:0)

您的问题可以轻松解答。

我希望你明白,无论什么价值都必须正确格式化,以便放入SQL查询。如此准备的声明呢。与* _escape_string不同,后者仅执行部分格式化,准备好的语句用于执行完整。而且必须在哪里完成 - 不是更早,不是更晚 - 所以它让人无法忘记。这才是重点。

你只需要理解格式化和转义之间的区别,这是教授从未理解过的。