我正在尝试使用PHP和mysql创建时间表。
基本上,我有一个for循环,范围从600到2200,在该循环内,另一个循环在一周的每一天从1到7。
在第二个for循环内,我在数据库中搜索一个事件,其中day
等于第二个循环内的迭代,并且开始和结束都在第一个for循环的范围内。我有两个事件应该返回。但是,它会跳过第一个,而仅返回第二个。
这是我的代码:
$week = 1;
for($i = 600; $i <=2200; $i += 25){
echo $i .'</br>';
for($j = 1; $j < 8; $j++){
echo $j .'</br>';
$query = 'SELECT * FROM `event` WHERE `week` =:week AND `day` =:day AND (`start` <=:start AND `end` >=:start)';
$stmt = $dbh->prepare($query);
$stmt->bindParam(':week', $week);
$stmt->bindParam(':day', $j);
$stmt->bindParam(':start', $i);
if($stmt->execute()){
if($stmt->rowCount() > 0){
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
}
}
}
我也尝试过
SELECT *
FROM `event`
WHERE `week` =:week AND `day` =:day AND (:start BETWEEN `start` AND `end`)
在两种情况下我都得到相同的结果。
在$ i等于900时,它应该返回id 9的行,但是不会,但是在$ i为1875时,它会打印出该事件。
当我尝试将其直接放在phpmyadmin中时,这是一张图片
任何人都可以看到为什么吗?
答案 0 :(得分:0)
问题是“开始”和“结束”数据类型,只是意识到它们是varchar而不是int。