Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中准备SQLite SQL语句_Php_Sql_Sqlite_Escaping_Escapestring - Fatal编程技术网

在PHP中准备SQLite SQL语句

在PHP中准备SQLite SQL语句,php,sql,sqlite,escaping,escapestring,Php,Sql,Sqlite,Escaping,Escapestring,我正在尝试如何最好地在PHP中准备SQLite SQL字符串。SQLite3类附带了一个函数,但我的问题如下: 尝试1) 这将产生一个全部被顶起的字符串: 插入到项目(“id”、“内容”、“标题”、“创建的”)值中 (“4e7ce7c18aac8”,“是否工作”,空, “2011-09-23T16:10:41-04:00” 这些不是双引号,而是双引号。显然不行 试试2) 这导致: 在项目中插入(“id”、“内容”、“标题”、“已创建”)值 (“4e7ce7c18aac8”,“这行吗”,空, “

我正在尝试如何最好地在PHP中准备SQLite SQL字符串。SQLite3类附带了一个函数,但我的问题如下:

尝试1)

这将产生一个全部被顶起的字符串:

插入到项目(“id”、“内容”、“标题”、“创建的”)值中 (“4e7ce7c18aac8”,“是否工作”,空, “2011-09-23T16:10:41-04:00”

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


试试2)

这导致:

在项目中插入(“id”、“内容”、“标题”、“已创建”)值 (“4e7ce7c18aac8”,“这行吗”,空, “2011-09-23T16:10:41-04:00”)

此查询工作正常,但escapeString函数没有修改任何内容,因为没有任何内容需要转义


试试3)

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

PHP分析错误:语法错误,意外的T_变量,应为',' 或者“;”


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


最后,逃逸()的意义是什么??我不知道该如何正确地使用它。

您不能逃避整个查询。您可以逃避正在插入到查询中的不安全数据,例如

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

好的,谢谢Marc,但是现在数据库存储了带有转义斜杠的值,当我读出时,它显示如下:这不管用吗?我什么时候“做”这个呢?我如何将它们重新展开以供显示?有没有一个标准的方法?别以为我找到了:stripcslashes()到unescape。谢谢——获得这些额外的斜杠意味着您的PHP启用了magic_引号。请立即关闭。你能详细说明一下魔术师的报价问题吗(或者给我指一个参考资料)。我的应用程序将在多个系统上运行,其中许多系统都会有神奇的引号-这有关系吗?这是一个不推荐使用的(一开始就很愚蠢)功能,如果你在系统上运行时打开了它,那么它们的配置和/或运行的是过时的PHP版本。
$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);
$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);
$unsafe = $_GET['nastyvar'];
$safe = SQLite3::escapeString($unsafe);
$sql = "INSERT INTO table (field) VALUES ($safe);";
echo ($sql);