Php SQL查询产生SQL异常,但是在DBMS中运行它是没有错误的吗?

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

我正在使用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
             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
,并且一直认为它肯定是其中之一。你可以把它作为答案提交,我很乐意接受。谢谢。在我的极限恢复为正整数后,我明天会给你留点东西。