Php PDO MySQL查询因多个比较运算符而失败

Php PDO MySQL查询因多个比较运算符而失败,php,mysql,pdo,Php,Mysql,Pdo,我确信我只是格式化不正确,但是我的一个查询出现了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', $a

我确信我只是格式化不正确,但是我的一个查询出现了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';

end\u hour
是表中的有效列,我试图确定
star\u hour
是否大于
:hr
,以及
end\u hour
是否小于或等于
:hr
。我一定是做错了。有什么建议吗?这是因为我在查询中使用了两次相同的命名参数
:hr
,但只绑定了一次?如果是这样,除了使用相同的数据设置另一个命名参数外,还有什么解决方案?

尝试为参数使用不同的名称,即使您使用的是相同的值:

$db = static::getDB();
$sql = 'SELECT * FROM djs WHERE day = :day 
                 AND start_hour > :hr1 AND end_hour <= :hr2 
                 AND shifts LIKE :shift';

$stmt = $db->prepare($sql);
$stmt->bindParam(':day', $arr['day'], PDO::PARAM_STR);
$stmt->bindParam(':hr1', $arr['hr'], PDO::PARAM_INT);
$stmt->bindParam(':hr2', $arr['hr'], PDO::PARAM_INT);
$stmt->bindParam(':shift', $shift, PDO::PARAM_STR);
$stmt->execute();
return $stmt->fetch(PDO::FETCH_OBJ);
$db=static::getDB();
$sql='从djs中选择*,其中日期=:天

和start_hour>:hr1和end_hour尝试为参数使用不同的名称,即使使用相同的值:

$db = static::getDB();
$sql = 'SELECT * FROM djs WHERE day = :day 
                 AND start_hour > :hr1 AND end_hour <= :hr2 
                 AND shifts LIKE :shift';

$stmt = $db->prepare($sql);
$stmt->bindParam(':day', $arr['day'], PDO::PARAM_STR);
$stmt->bindParam(':hr1', $arr['hr'], PDO::PARAM_INT);
$stmt->bindParam(':hr2', $arr['hr'], PDO::PARAM_INT);
$stmt->bindParam(':shift', $shift, PDO::PARAM_STR);
$stmt->execute();
return $stmt->fetch(PDO::FETCH_OBJ);
$db=static::getDB();
$sql='从djs中选择*,其中日期=:天

开始时间>:hr1和结束时间所以唯一的选择就是重复我在问题中提到的你自己?为什么PDO不允许在同一查询中使用同一命名参数两次?我觉得有点奇怪。@spice:读这篇文章,唯一的选择就是像我在问题中提到的那样重复你自己?为什么PDO不允许在同一查询中使用同一命名参数两次?我觉得有点奇怪。@spice:读这个@Magnus erikson谢谢你回答了我的问题。很抱歉重复了一遍。@Magnus Eriksson谢谢你回答了我的问题。抱歉重复了。