0

我正在使用 PHP 中的 SQLite3。

一位朋友告诉我,我应该更喜欢准备好的陈述,我也在 StackOverflow 上的许多帖子中读到了这一点。我想了解使用准备好的语句的好处,因为我必须写更多的行,而不是像使用这样的常规转义:

$db->exec("Insert INTO table VALUES(NULL,'".$db->escapeString($value)."')"

或使用:

foreach($_POST as $k => $v) {
    $_POST[$k] = $db->escapeString($v);
}

为什么我应该使用准备好的语句?优缺点都有什么?

4

2 回答 2

2

人们经常将参数与本机准备语句混淆。我怀疑 Sqlite 是否支持后者,但是您必须始终使用参数来替换查询中的实际数据。

当处理参数(也称为“占位符”)时,会发生重要的事情:

  • 应用了所有必需的格式(即转义引用)(而转义只会完成一半的工作 - 让您的查询对注入敞开大门)。
  • 这种格式应用于查询的数据,而不是源变量,破坏它(因此,您可以通过电子邮件发送或存储在会话中)。
  • 这种格式会自动应用,使您的安全独立于开发人员的善意。这是非常重要的事情
于 2013-03-19T11:33:02.753 回答
1

Prepared Statement主要用于避免SQL injection黑客和任何恶意程序所做的事情。

于 2013-03-19T11:31:36.157 回答