Php SQL查询产生SQL异常,但是在DBMS中运行它是没有错误的吗?
我正在使用PDO执行以下SQL查询,该查询应将最多Php SQL查询产生SQL异常,但是在DBMS中运行它是没有错误的吗?,php,mysql,pdo,Php,Mysql,Pdo,我正在使用PDO执行以下SQL查询,该查询应将最多5用户与一个mod匹配,我事先已检索到该ID: $sql = 'INSERT INTO modusergrade (`ModId`, `UserId`) SELECT :modId AS ModId, u.Id AS UserId FROM users AS u LEFT OUTER JOIN modusergrade AS g ON g.UserId = u.Id
5
用户
与一个mod
匹配,我事先已检索到该ID:
$sql = 'INSERT INTO modusergrade (`ModId`, `UserId`)
SELECT :modId AS ModId, u.Id AS UserId
FROM users AS u
LEFT OUTER JOIN modusergrade AS g ON g.UserId = u.Id
WHERE u.Id NOT IN
(SELECT UserId
FROM moduserconflicts
WHERE ModId = :modId)
GROUP BY u.Id
ORDER BY COUNT(g.ModId), rand()
LIMIT :maxUsers';
$query = $db->prepare($sql);
$query->bindParam(':modId', $id, PDO::PARAM_INT);
$query->bindParam(':maxUsers', $maxUsers, PDO::PARAM_INT);
$query->execute();
但是,执行此操作会产生以下错误:
SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解第11行“5”附近使用的正确语法
第11行对应于
限制
,因此我假设rand()
存在某种问题。我是否应该以其他方式传递它以获得“随机顺序”效果?如图所示,问题在于pdo处理此参数化限制的方式。您需要先将值强制转换为整数(int)
,然后再绑定它。虽然不完全相同,但最终的解决方案是相同的。我检索了上面的maxUsers
,忘记将其转换为int
,并且一直认为它肯定是其中之一。你可以把它作为答案提交,我很乐意接受。谢谢。在我的极限恢复为正整数后,我明天会给你留点东西。