【发布时间】:2019-06-21 11:45:51
【问题描述】:
我确定我的格式不正确,但我的一个查询出现了 PDO 异常,并且调试没有帮助。
如果我运行以下它可以正常工作:
$db = static::getDB();
$sql = 'SELECT * FROM djs WHERE day = :day
AND start_hour = :hr AND shifts LIKE :shift';
$stmt = $db->prepare($sql);
$stmt->bindParam(':day', $arr['day'], PDO::PARAM_STR);
$stmt->bindParam(':hr', $arr['hr'], PDO::PARAM_INT);
$stmt->bindParam(':shift', $shift, PDO::PARAM_STR);
$stmt->execute();
return $stmt->fetch(PDO::FETCH_OBJ);
但是当我尝试在这样的查询中添加多个比较运算符时:
$sql = 'SELECT * FROM djs WHERE day = :day
AND start_hour > :hr AND end_hour <= :hr
AND shifts LIKE :shift';
它抛出以下指向包含执行命令的行的异常:
Uncaught exception: 'PDOException'
Message: 'SQLSTATE[HY093]: Invalid parameter number'
end_hour 是表中的有效列,我试图确定 star_hour 是否大于 :hr 和 end_hour 是否小于或等于 :hr。我一定做错了。请问有什么指点吗?这是因为我在查询中使用了相同的命名参数:hr 两次但只绑定一次?如果是这样,除了设置另一个具有相同数据的命名参数之外,还有什么解决方案?
【问题讨论】:
-
@Magnus Eriksson 谢谢你回答了我的问题。抱歉重复了。