我正在尝试在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而失败;与服务器通信时出错。"
有人能指出我正确的方向吗?
答案 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');