jTable jQuery插件为什么我的MySQL存储过程失败了?

时间:2014-06-18 18:53:40

标签: php jquery mysql stored-procedures jquery-jtable

我正在尝试在jTable中实施过滤器。这是jTable Filtering Demo

我使用演示提供的jQuery代码成功地将POST数据发送到listAction php脚本。我访问此数据并将其分配给$ filter变量。我还在字符串前后添加两个通配符,告诉MySQL执行全面搜索而不是索引搜索。

    $filter = '%';
    $filter .= $_POST['name'];
    $filter .= '%';
    $startIndex = $_GET['jtStartIndex'];
    $pageSize = $_GET['jtPageSize'];
    $sorting = $_GET['jtSorting'];

然后我调用存储过程并传入每个变量。我删除了实际的数据库和程序名称,但我确认它们是正确的。

$mysqli->query("USE data;");
$res = $mysqli->query("CALL proced($startIndex, $pageSize, $filter);");

$ res在这里返回false。

调用存储过程确实有效,因为我有其他功能以这种方式工作。我有其他存储过程工作,只是正确地返回0到9个记录。这是当前的存储过程代码:

CREATE DEFINER=`root`@`localhost` PROCEDURE `proced`(startIndex INTEGER, pageSize INTEGER, filter VARCHAR(255))
BEGIN
    SELECT * FROM reports 
    WHERE `new`=0 AND ReportingName LIKE filter
    ORDER BY idReports ASC 
    LIMIT startIndex, pageSize;
END

传递MySQL工作台中的值,查询返回正确的行:

call proced(
    0,
    10,
    'Art%'
);

但jTable因&#34而失败;与服务器通信时出错。"

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

通过从MySQL获取错误来实现此目的:

if(!$res){
    ChromePhp::log($mysqli->error);
    die('error ['. $mysqli->error . ']');

}

错误:

Unknown column 'Art' in 'field list'

Solution(从链接中复制):

尝试对“Art”使用不同的引号,因为标识符引号字符是反引号(“`”)。否则,MySQL会“认为”您指向名为“Art”的列。

另见MySQL 5文档

因此,只需在传入的String参数中添加单引号即可:

CALL procedure('$filter');