2

我有一个功能如下从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);
}

它显示错误消息显示为

'SQLSTATE[42000]: 语法错误或访问冲突。

字段“joined_date”是表中的日期时间格式,$selected_joined_date 是字符串格式。

如何比较不同类型的日期时间格式?

4

4 回答 4

1

您需要在查询中为您的字符串加上引号。

$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";
于 2013-05-07T20:26:54.927 回答
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 中的引号内。

于 2013-05-07T20:35:39.880 回答
0

出于好奇,我做了一个小测试,php 日期格式是否必须与 mysql 日期时间格式相同。事实证明,格式无关紧要。如果 PHP 变量是Mysql 日期和时间格式,则搜索成功。

默认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查询中的变量需要在引号内之外,问题似乎在其他地方。

于 2013-05-07T23:30:45.390 回答
0

您可以使用 mysql提供的Date()函数将字符串格式转换为日期

mysql> 选择日期('2003-12-31 01:02:03');
        -> '2003-12-31'

您的查询将如下所示: Got MySql Solution, you can use str_to_date function 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
于 2013-05-07T19:42:29.793 回答