繁体   English   中英

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

[英]jTable jQuery plugin why is my MySQL stored procedure failing?

我正在尝试在jTable中实现过滤器。 这是jTable筛选演示

我使用了演示提供的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失败,并显示“与服务器通信时发生错误”。

谁能指出我正确的方向?

通过从MySQL返回错误来解决此问题:

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

}

错误:

Unknown column 'Art' in 'field list'

解决方案 (从链接复制):

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

另请参见MySQL 5文档

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

CALL procedure('$filter');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM