我有一个日期列的表格,格式为mm / dd / yyyy。
所以我试图做以下事情:
<?php
$start = '05/01/2016';
$end = '05/31/2016';
$stmt = $link->prepare('SELECT COUNT(*) date from dates WHERE user=:user AND date between '$start' AND '$end'');
$stmt->bindParam(':user', $user, PDO::PARAM_STR);
if($stmt->execute()) {
$result = $stmt->fetchAll();
foreach($result as $row) {
if($row[0] > 0) {
echo $row[0];
}
}
}
?>
我认为问题可能是多个AND运算符。
答案 0 :(得分:2)
您正在为用户使用占位符,这很好,但为什么您没有使用占位符作为开始日期和结束日期?
我建议你使用它:
$stmt = $link->prepare('SELECT COUNT(*) date from dates WHERE user=:user AND date between :start AND :end');
$stmt->bindParam(':user', $user, PDO::PARAM_STR);
$stmt->bindParam(':start', $start, PDO::PARAM_STR);
$stmt->bindParam(':end', $end, PDO::PARAM_STR);
无论如何,日期格式应该是YYYY-MM-DD
,但是阅读您的评论似乎您使用字符串来使用格式MM/DD/YYYY
存储日期。
虽然此查询将返回您所期望的内容:
"SELECT COUNT(*) date
from dates
WHERE user=:user AND str_to_date(date, 'MM/DD/YYYY') between :start AND :end"
使用str_to_date,您可以将字符串转换为日期,并且比较将按预期成功,但我强烈建议您使用DATE列存储日期,您始终可以在应用程序层格式化日期。
答案 1 :(得分:1)
您的问题很可能是使用此日期格式'05 / 01/2016'。您使用的是葡萄牙语/巴西语格式的日期,而这些日期并未被mysql立即识别。
尝试'2016-01-05'格式,它可能会起作用