[英]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.