我有一个如下函数从mysql数据库中提取记录。
function getMember($read, $selected_joined_date) {
$sql = "SELECT first_name, last_name, member.joined_date
FROM user
INNER JOIN member USING (user_id)
WHERE user.joined_date > $selected_joined_date
ORDER BY joined_date";
return $read->fetchAll($sql);
}
显示为
的dipslays错误消息' SQLSTATE [42000]:语法错误或访问冲突。
字段' joined_date'是表中的日期时间格式,$ selected_joined_date是 字符串格式。
如何比较不同类型的日期时间格式?
答案 0 :(得分:0)
您可以使用mysql提供的Date()函数将字符串格式转换为Date
mysql> SELECT DATE('2003-12-31 01:02:03'); -> '2003-12-31'
您的查询将如下所示: 获得MySql解决方案,您可以使用str_to_date函数as;
mysql>select str_to_date('2012-10-12 10:20:30','%Y-%m-%d %H:%i:%s');
所以你的Sql String将是,
$sql = "SELECT first_name, last_name, member.joined_date
FROM user
INNER JOIN member USING (user_id)
WHERE user.joined_date >str_to_date('$selected_joined_date','%Y-%m-%d %H:%i:%s')
ORDER BY joined_date";
// Provided that string selected_joined_date is in format 2012-10-12 10:20:30
答案 1 :(得分:0)
在查询中,您的字符串需要引号。
$sql = "SELECT first_name, last_name, member.joined_date
FROM user
INNER JOIN member USING (user_id)
WHERE user.joined_date > '$selected_joined_date'
ORDER BY joined_date";
答案 2 :(得分:0)
Mysql喜欢“2013-05-07 15:30:00”格式的日期时间,php几乎可以处理任何事情。
您可以将$ selected_join_date转换为该格式,如下所示:
$selected_join_date = date("Y-m-d H:i:s", strtotime($selected_join_date));
假设$ selected_join_date采用php的一种可接受格式:http://www.php.net/manual/en/datetime.formats.php
然后你可以将字符串传递给mysql,它会愉快地比较它们。 Rocket Hazmat指出,变量(以及字符串日期时间)需要在sql的引号内。
答案 3 :(得分:0)
我出于好奇心做了一点测试,php日期格式是否必须与mysql datetime格式相同。 原来,格式并不重要。 如果PHP变量为Mysql Date and Time格式,则搜索成功。
默认的mysql日期时间格式:
YYYY-MM-DD HH:MM:SS
用于搜索数据库的格式:
'Y-m-d H:i:s'
'Y/m/d H:i:s'
'Y/m/d'
'YmdHis'
'Ymd'
使用DateTime::createFromFormat()
函数
问题,除了查询中的$selected_joined_date
变量需要在引号内,似乎在其他地方。