为什么两种功能都让我失望?或者这只是一种幻觉?
<?php
echo sqlite_escape_string('Hello "World" \'\' ...');
echo "\n";
echo SQLite3::escapeString('Hello "World" \'\' ...');
echo "\n";
?>
输出:
Hello "World" '''' ...
Hello "World" '''' ...
答案 0 :(得分:2)
您应该使用PDO来访问您的数据库,因为它具有prepared statements,它比转义更安全且速度更快。
PHP数据对象(PDO)扩展 定义轻量级,一致 用于访问数据库的接口 PHP。每个数据库驱动程序 实现PDO接口即可 将特定于数据库的功能公开为 常规扩展功能。
使用PDO时的另一个重大优势是,您可以轻松地在数据库之间切换(例如,MySQL与PostGRESQL对比SQLite),而无需更改大量代码。
可以在nettuts处快速了解如何使用PDO。如果你问我一个非常好的阅读/介绍!
答案 1 :(得分:0)
SQLite 中的字符串文字用单引号括起来,所以 SQLite3::escapeString() 做它应该做的:返回一个用单引号括起来的字符串(NUL 字符除外)。
如果您正在寻找一种对标识符("example"
、[example]
或 `example`
)进行转义的方法,似乎没有预定义的函数可以做到这一点。 但是 SQLite 在不允许使用字符串文字的地方接受字符串文字作为标识符:
如果在允许标识符但不允许字符串文字的上下文中使用单引号中的关键字(例如:'key' 或 'glob'),则该标记被理解为标识符而不是一个字符串文字。
来源:https://www.sqlite.org/lang_keywords.html
这意味着类似以下的查询是有效的:
$sqlite->exec("CREATE TABLE '" . SQLite3::escapeString("very \" odd ' name") . "' (example)");