Php 从mysql表中获取数据,其中一列包含字符串格式的日期,并与today';日期

Php 从mysql表中获取数据,其中一列包含字符串格式的日期,并与today';日期,php,mysql,Php,Mysql,我收到一个客户的任务,他希望对正在进行的应用程序进行一些更改。有一个名为users的表,其中有一个名为birthdate的字段。以前的开发人员是个白痴,他保存了生日varchar(255),而不是datetime。“生日”列中的数据保存为1986年1月1日 我想获取所有生日在当前日期的用户 我尝试使用: $query = "SELECT * FROM users WHERE DAY(STR_TO_DATE(birthday, '%Y-%m-%d')) = '".date('d')."' A

我收到一个客户的任务,他希望对正在进行的应用程序进行一些更改。有一个名为users的表,其中有一个名为birthdate的字段。以前的开发人员是个白痴,他保存了生日
varchar(255)
,而不是
datetime
。“生日”列中的数据保存为1986年1月1日

我想获取所有生日在当前日期的用户

我尝试使用:

$query = "SELECT  * FROM users WHERE 
DAY(STR_TO_DATE(birthday, '%Y-%m-%d')) = '".date('d')."' 
AND MONTH(STR_TO_DATE(birthday, '%Y-%m-%d')) = '".date('m')."'";

但它返回的是一组空数据。如何解决此问题?

您的日期格式与问题中指定的日期格式不匹配。我想你在寻找:

$query = "SELECT * FROM users WHERE 
DAY(STR_TO_DATE(birthday, '%M %d, %Y')) = '".date('d')."' 
AND MONTH(STR_TO_DATE(birthday, '%M %d, %Y')) = '".date('m')."'";

您的日期格式与您在问题中指定的格式不匹配。我想你在寻找:

$query = "SELECT * FROM users WHERE 
DAY(STR_TO_DATE(birthday, '%M %d, %Y')) = '".date('d')."' 
AND MONTH(STR_TO_DATE(birthday, '%M %d, %Y')) = '".date('m')."'";

我找到了答案,意识到我做错了什么:-

$query = "SELECT * FROM users 
           WHERE DAY(date_format(str_to_date( birthday, '%M %d, %Y' ), '%Y-%m-%d' )) = '".date('d')."'
          AND MONTH(date_format(str_to_date( birthday, '%M %d, %Y' ), '%Y-%m-%d' )) = '".date('m')."'";

首先,我们需要将生日从字符串转换为兼容日期,然后我们需要将其格式化为实际日期。

我解决了这个问题,意识到我做错了什么:-

$query = "SELECT * FROM users 
           WHERE DAY(date_format(str_to_date( birthday, '%M %d, %Y' ), '%Y-%m-%d' )) = '".date('d')."'
          AND MONTH(date_format(str_to_date( birthday, '%M %d, %Y' ), '%Y-%m-%d' )) = '".date('m')."'";

首先,我们需要将生日从字符串转换为兼容日期,然后我们需要将其格式化为实际日期。

我将以数据库使用的相同格式将今天的日期呈现为字符串,然后搜索精确的字符串。至少这样,如果字段被索引,那么您将获得索引的好处。(或者您应该添加一个。)按照原样查询,您将始终必须进行顺序扫描

$today = date('F d, Y');
$sql = 'SELECT * FROM users WHERE birthday = :today';

此外,还可以通过或将准备好的语句与绑定参数一起使用。有一些很好的例子。

我会将今天的日期呈现为数据库使用的相同格式的字符串,然后搜索该字符串。至少这样,如果字段被索引,那么您将获得索引的好处。(或者您应该添加一个。)按照原样查询,您将始终必须进行顺序扫描

$today = date('F d, Y');
$sql = 'SELECT * FROM users WHERE birthday = :today';
此外,还可以通过或将准备好的语句与绑定参数一起使用。有一些很好的例子