准备好的语句与PHP SQLite3中的转义字符串

时间:2013-03-19 11:28:18

标签: php sqlite prepared-statement

我在PHP中使用SQLite3。

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

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

或使用:

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

为什么要使用预准备语句?有什么优点和缺点?

2 个答案:

答案 0 :(得分:1)

Prepared Statement主要用于避免黑客和任何恶意程序完成SQL injection

答案 1 :(得分:1)

人们常常将参数与本机预处理语句混淆。我怀疑Sqlite支持后者,但是你必须总是使用参数来替换查询中的实际数据。

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

  • 应用了所有必需的格式(即转义引用)(转义时只会一半作业 - 让您的查询全开注入)。
  • 这样的格式应用于进入查询的数据,而不是源变量,因此可以破坏它(因此,您可以通过电子邮件发送或存储在会话中)。
  • 自动应用这种格式,使您的安全独立于开发人员的良好意愿。这是非常重要的事情