我在PHP中使用SQLite3。
一个朋友告诉我,我应该更喜欢准备好的语句,我也在StackOverflow上的许多帖子中读到过。我想了解使用预处理语句的好处,因为我必须编写比常规转义(如:
)更多的行。$db->exec("Insert INTO table VALUES(NULL,'".$db->escapeString($value)."')"
或使用:
foreach($_POST as $k => $v) {
$_POST[$k] = $db->escapeString($v);
}
为什么要使用预处理语句?优点和缺点是什么?
人们经常混淆参数和原生预处理语句。我怀疑Sqlite是否支持后者,但无论如何,您必须总是使用参数来替代查询中的实际数据。
当参数(也称为"占位符")被处理时,重要的事情发生了:
- 应用所有所需的格式化(即转义和引号)(而转义只会完成一半的工作-使您的查询大范围开放给注入)。
- 这样的格式被应用到要查询的数据,而不是源变量,破坏它(所以,你可以通过电子邮件发送它或存储在会话中)。
- 这样的格式被自动应用,使您的安全独立于开发人员的善意。这是非常重要的事情
Prepared Statement主要用于避免黑客和任何恶意程序的SQL injection
。