php - 在 PHP 中准备 SQLite SQL 语句

标签 php sql sqlite escaping

我正在尝试如何最好地在 PHP 中准备我的 SQLite SQL 字符串。 SQLite3 类带有一个 escapeString()功能,但这是我的问题:

尝试 1)

$sql = "INSERT INTO items ('id','content','title','created') VALUES ('4e7ce7c18aac8', 'Does this work', NULL, '2011-09-23T16:10:41-04:00');";
$sql = SQLite3::escapeString( $sql );
echo ($sql);

这会导致字符串全部被顶起:

INSERT INTO items (''id'',''content'',''title'',''created'') VALUES (''4e7ce7c18aac8'', ''Does this work'', NULL, ''2011-09-23T16:10:41-04:00'');

那些不是双引号,而是双引号。显然行不通。


尝试 2)

$sql = 'INSERT INTO items ("id","content","title","created") VALUES ("4e7ce7c18aac8", "Does this work", NULL, "2011-09-23T16:10:41-04:00");';
$sql = SQLite3::escapeString( $sql );
echo ($sql);

这导致:

INSERT INTO items ("id","content","title","created") VALUES ("4e7ce7c18aac8", "Does this work", NULL, "2011-09-23T16:10:41-04:00");

这个查询工作正常,但是 escapeString 函数没有修改任何东西,因为没有什么可以转义......


尝试 3)

$sql = 'INSERT INTO items ("id","content","title","created") VALUES ("4e7ce7c18aac8", "Doesn't this work", NULL, "2011-09-23T16:10:41-04:00");'; $sql = SQLite3::escapeString( $sql ); echo ($sql);

这是个大问题 - 现在我的一个值中有一个撇号。它甚至不会进入 escapeString(),因为 PHP 会在无效字符串上抛出错误:

PHP Parse error: syntax error, unexpected T_VARIABLE, expecting ',' or ';'


我应该如何处理这个问题?请记住,在实际代码中,我的参数值将是变量,所以我是否应该在将每个变量传递到字符串之前对其进行转义?如果是这样,我使用什么功能?

最后,escapeString() 的意义何在?我不知道应该如何正确使用它。

最佳答案

您不会转义整个查询。您将插入到查询中的不安全数据转义,例如

$unsafe = $_GET['nastyvar'];
$safe = SQLite3::escapeString($unsafe);
$sql = "INSERT INTO table (field) VALUES ($safe);";
echo ($sql);

关于php - 在 PHP 中准备 SQLite SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7534848/

相关文章:

php - 如果输入为空,如何将单选按钮的值发送到数据库?

php - 功能在服务器上不起作用。不能在写上下文中使用函数返回值

mysql - 如何从父表中选择与子表中的外键无关的数据

sql - 在 SQL 中使用 distinct 函数

sql - SQL Server 2008 上的唯一键与唯一索引

.net - 使用 SQLite 和 WinForms 2.0 C# 的编码问题

iphone - 如何在 objective-c 中创建和访问sqlite光标?

php - 按天从不同时区的mysql中选择(php)

php - 将一个字符串分成多个查询

sqlite - 如何使用 FTS5 和 MATCH 查找记录?