0

カレンダーから日付を取得するフォームがあります。そのフォームは開始日と終了日を渡します。私のデータベース テーブルは日付をタイムスタンプ形式で保存します。開始日と終了日の間にデータベース テーブルからレコードを選択するクエリを作成する必要があります。クエリを作成するにはどうすればよいですか? 以下のコードを試しましたが、うまくいきません。

 if(isset($_POST['filter']))
    {
        $sid=$_POST['sid'];
        $start= date("dMY",strtotime($_POST['start']));
        $end= date("dMY",strtotime($_POST['end']));

        $res=$db->fetchAll("SELECT * FROM `logfile` WHERE `site_id`=".$sid." AND (date('dMY',`timestamp`) BETWEEN $start AND $end)");


    }

何かご意見は?

ありがとう。

4

3 に答える 3

1

理由もなく、PHP と MySQL に多くの役に立たない日付/時刻文字列 <-> ネイティブ変換を強制しています。

なぜ単に持っていないのですか:

$start = strtotime($_POST['start']);

SELECT ... WHERE `timestamp` BETWEEN FROM_UNIXTIME($start) AND ...
于 2012-08-07T04:54:14.950 に答える
0

$_POST['start']@Matei Mihai が言ったように、タイムスタンプ形式に変換する必要はなく、$_POST['end']日付列を引用符で囲む必要があります。

また、日付を MySQL と互換性のある形式に変換する必要があります'2012-08-01'

"SELECT * 
 FROM `logfile` 
 WHERE `site_id`=".$sid." AND 
       (date('dMY',`timestamp`) BETWEEN '$start' AND '$end')");
于 2012-08-07T04:54:23.400 に答える
0

$_POST['start']とがすでにタイムスタンプ形式になっている場合$_POST['end']は、変更しないでください。それ以外の場合は、文字列をタイムスタンプに変換するだけです:

$start = strtotime($_POST['start']); // where $_POST['start'] might be 2012/08/07
$end = strtotime($_POST['end']);


$res=$db->fetchAll("SELECT * FROM logfile WHERE site_id=".$sid." AND date BETWEEN $start AND $end"); 
于 2012-08-07T04:55:09.123 に答える