php SELECT (计数)在 mysql/pdo WHERE 格式化日期

php SELECT (count) in mysql/pdo WHERE formatted date

我需要 select(计数)具有按 YEAR-MONTH-DAY 格式化的特定日期的行。

我试试

 $date = $_GET['date'];

 // requete qui recupere les evenements
$result = "SELECT COUNT(*) FROM evenement WHERE STR_TO_DATE(start, '%Y-%m-%d') = $date";

 // connexion a la base de donnees
 try {
 $bdd = new PDO('mysql:host=;dbname=', '', '');
 } catch(Exception $e) {
 exit('Impossible de se connecter a la base de donnees.');
 }
 $sth = $bdd->query($result);
 echo json_encode($sth->fetchColumn());

其中日期变量是具有该格式的日期。我想计算行数和 return 该日期的行数。

我也试试

$result = "SELECT COUNT(*) FROM evenement WHERE DATE_FORMAT(start, '%Y-%m-%d') = $date";

$result = "SELECT COUNT(*) FROM evenement WHERE DATE_FORMAT(DATE(start), '%Y-%m-%d') = $date";

但没有任何效果

有什么想法吗?

谢谢

这样改

$result = "SELECT COUNT(*) FROM evenement WHERE DATE_FORMAT(start, '%Y-%m-%d') = '".$date."'";

您需要将 $date 括在 '' 引号中,否则它将执行减法,如 (2014-10-01 = 2003)

您应该将常量转换为日期,而不是列。所以,我的第一次尝试是:

SELECT COUNT(*)
FROM evenement
WHERE start = DATE('$date');

但是,这可能行不通。您可能需要使用具有适当格式的 str_to_date()

此方法更好的原因是优化器可以利用 evenement(start) 上的索引。

所有的回复和评论都导致了这个答案

$result = "SELECT COUNT(*) FROM evenement WHERE DATE_FORMAT(DATE(start), '%Y-%m-%d') = DATE('".$date."')"

问题是 $date 变量需要 DATE($date) 而在 SELECT 中需要引号。