每次用户按下应该获取数据库的下10行的按钮时,我都会通过ajax请求调用php脚本。当按下按钮时,没有任何反应,我在控制台或php中没有错误
$query = $conn->prepare('SELECT name, file_loc, img_id, filter, votes FROM images WHERE user_id=? ORDER BY votes DESC LIMIT ?, 10');
$query->execute(array($user_id, $skip));
$result = $query->fetchAll();
当我去phpmyadmin时,手动填写变量,直接运行查询,它运行正常。
在php中,当我将echo $skip . ' ' . $user_id;
添加到脚本的末尾时,它显示所有变量都是它们应该是的。另外,如果我编辑查询的结尾以使用静态数而不是将变量插入到读取LIMIT 10, 10
,那么一切正常(尽管不是变量,它不能增加10)。
我不知道为什么这不能正常运行,但我觉得我忽略了一些显而易见的事情。有什么想法吗?
答案 0 :(得分:1)
在仿真模式下(默认情况下处于启用状态),PDO用实际数据替换占位符。 通过“懒惰”绑定,PDO将每个参数视为字符串 结果,查询变为
LIMIT '10', 10
这显然是导致查询失败的错误语法。
所以,你有2个解决方案:
通过关闭仿真(因为mysql可以正确排序所有占位符)
或者通过明确地绑定数字,就像在Kalpesh的答案中那样。但是不要忘记为这个变量设置正确的类型(PDO :: PARAM_INT)。
要关闭仿真,请在连接
后运行此代码$conn->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
并且,为了获得错误,请添加此
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
答案 1 :(得分:0)
你能试试吗?
$query = $conn->prepare('SELECT name, file_loc, img_id, filter, votes FROM images WHERE user_id=? ORDER BY votes DESC LIMIT ?, 10');
$query->bindParam(1, $user_id);
$query->bindParam(2, $skip);
$query->execute();
$result = $query->fetchAll();