WHERE子句中的SELECT with date字段通过Ajax

时间:2016-08-11 20:10:12

标签: php jquery mysql ajax jquery-query-builder

jquery构建器(来自http://querybuilder.js.org/)用于让用户通过PHP函数选择日期并进一步选择DataTables(datatables.net/)的数据。

DataTables,尤其是Ajax函数如下所示:

var table = $(id).DataTable({
        serverSide: true,
        searching: true,
        processing: true,,
        ajax: {
            url: "controllers/myAjax.php",
            type: "POST",
            data: result
        }
});

作为 data 传递的对象由queryBuilder定义,并附加到PHP脚本中的查询字符串。为了解决问题,我将数据作为普通SQL(http://querybuilder.js.org/plugins.html#import-export)传递。在我的问题测试案例中,这是:

WHERE birthdate < '1990-01-01' 

这将导致SELECT查询:

SELECT * from table_1 WHERE birthdate < '1990-01-01' 

此查询抛出MySQL错误:

"[...] check the manual that corresponds to your MySQL 
server version for the right syntax to use near '\'1990-01-01\' "

显然日期没有正确转义。但是当我向MySQL工作台输入这个查询时,服务器会执行并返回一组正确的结果。更重要的是,如果我使用单引号(&#39;)或双引号(&#34;),工作台并不在乎。

此外,我尝试使用PHP str_replace手动删除这些转义字符。该函数然后返回值,但显然被解释为int并打破其他查询(如相等的ID)。 msqli.real-escape-string(http://php.net/manual/de/mysqli.real-escape-string.php)也是如此。

我尝试的另一种方法是稍微更改Ajax函数的dataType - 但基本上我发送的是表单编码数据,所以默认类型应该没问题?

那么为什么(仅)日期字段以错误的方式被转义?在我必须编写自己的PHP函数来访问数据库之前,有没有相当快速的解决方案呢?

0 个答案:

没有答案