

htmlのフォーム送信より、type="date"の値を、SQL内のdate型カラムと比較しようとしますが、抽出できません。  
ソースコードは以下になります。  
なにかSQL,PHP,htmlのformの記述で間違っていますか？

[code]

    <form action="result.php" method="post">
      <input type="date" name="search_date">
      <input type="submit">
    </form>
    
    //event_dateカラムはdate型です
    $search_date = $_POST["search_date"];
    $sql = "select * from sample where event_date = ?";
    $stmt = $dbh->prepare($sql);
    //DBハンドラー用意済み
    $stmt->execute($stmt, $search_date);
    
[/code]

ちなみに、date型カラムの抽出条件として、type="date"のvalueで対応できますか？


CC BY-SA 3.0
2015-07-31T02:27:15.487
12861
2015-07-31T21:58:31.057
2015-07-31T03:46:10.523
10057
10057
question
php html mysql sql
MySQL | date型の比較方法


フォームから送信される値はISO 8601形式ですので

[code]

    2015-08-01T02:03:04+09:00
    
[/code]

のように日付と時刻を`T`で区切り、末尾にタイムゾーン指定が付加されています。

一方MySQLが認識可能な形式は

  * 15-08-01
  * 2015-08-01
  * 2015-08-01 02:03:04

という3形式の記号違いと記号なし版の都合6種類です。なので質問中のSQLは日付とは認識されず、`event_date`をISO
8601以外の文字列に変換してからパラメーターと比較していると思われます。

日付と認識させるためにはPHP側で`date('Y-m-d',
strtotime($_POST["search_date"]))`のように変換をかけてやればよいのではないでしょうか。


CC BY-SA 3.0
2015-07-31T21:58:31.057
12901
2015-07-31T21:58:31.057
5750
12861
answer