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が提供する Date() 関数を使用 して、文字列形式を Date に変換できます。

mysql> SELECT DATE('2003-12-31 01:02:03');
        -> '2003-12-31'

クエリは次のようになります

 mysql>select str_to_date('2012-10-12 10:20:30','%Y-%m-%d %H:%i:%s');

したがって、SQL文字列は次のようになります。

$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 に答える
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 で受け入れられている形式の 1 つであると仮定します: http://www.php.net/manual/en/datetime.formats.php

次に、文字列を mysql に渡すと、うまく比較されます。Rocket Hazmat が指摘したように、変数 (したがって文字列の日時) は、SQL の引用符で囲む必要があります。

于 2013-05-07T20:35:39.880 に答える