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