2

整数としてphpタイムスタンプを格納するテーブルがあります。日付と年ごとにこのデータにアクセスする必要があります。年を取得して、テーブル内に存在する列の行と一致させることができますが、タイムスタンプから月の名前を取得する必要があります。

これまでのコード

$query="SELECT * FROM archive_agent_booking
    WHERE agent_id='$account_no'
    AND (MONTHNAME(comp_date)='$month' AND year='$year' AND details='')
    ORDER BY order_time";

残念ながら、これは何も返しません。

comp_dateタイムスタンプを含む列です

4

2 に答える 2

2

最初に必要なFROM_UNIXTIME()MySQLに変換するためにラップする必要がありますDATETIMEMONTHNAME()

AND MONTHNAME(FROM_UNIXTIME(comp_date)) = '$month'

このプロジェクトの早い段階で少し方向を変える場合は、値をDATETIMEint 値の Unix タイムスタンプではなく、適切な型として保存することをお勧めします。MySQL は、UNIX_TIMESTMAP(), FROM_UNIXTIME()常に変換を行う必要がなく、ネイティブに日付型をより適切に処理できます。

$month値がユーザー入力に由来する場合、値は適切にエスケープされていると見なされます。それ以外の場合は、MySQLi や PDO などの準備済みステートメントをサポートする API に切り替えることを検討してください。

于 2013-01-16T14:30:38.427 に答える
2

最初に使用して日付に変換する必要がありますFROM_UNIXTIME

MONTHNAME(FROM_UNIXTIME(comp_date)) = '$month'

SQL Injection補足として、値が外部から取得された場合クエリは脆弱です。予防方法については、以下の記事をご覧ください。PreparedStatements を使用すると、値を一重引用符で囲む必要がなくなります。

于 2013-01-16T14:30:44.887 に答える