所以我在数据库中有一行叫做birthday,其值为let,比如2001-04-25(DATE类型)。 我想看看它是否是用户生日。 我现在每个月都有:
$monthday_today = date('m-d');
而不是查询:
$query = "SELECT * FROM users WHERE DATE_FORMAT(birthday, '%m-%d')=".$monthday_today;
但它没有用,有什么想法吗?
答案 0 :(得分:3)
您需要引用$ monthday_today值。
您查询(如果要输出)将如下所示:
SELECT * FROM users WHERE DATE_FORMAT(birthday, '%m-%d') != 04-2014
但这不是一个正确的SQL查询,查询应如下所示:
SELECT * FROM users WHERE DATE_FORMAT(birthday, '%m-%d') != '04-2014'
简单的解决方案是:
$query = "SELECT * FROM users WHERE DATE_FORMAT(birthday, '%m-%d')!="."'".$monthday_today."'";
好的解决方案是使用带有位置或命名参数的参数化预处理语句:
$query = "SELECT * FROM users WHERE DATE_FORMAT(birthday, '%m-%d') != ?";
或者
$query = "SELECT * FROM users WHERE DATE_FORMAT(birthday, '%m-%d') != :monthday_today";
您不需要引用参数化的预准备语句,因为它们会推断(推断)是否需要通过变量类型进行引用。
答案 1 :(得分:1)
有一个更简单的解决方案,不需要PHP:
$query = "SELECT * FROM users WHERE YEAR(birthday) = YEAR(NOW()) AND MONTH(birthday) = MONTH(NOW())";