mysql
  • sql
  • datetime
  • timestamp
  • 2013-01-16 63 views 2 likes 
    2

    我有一個表,它存儲一個php時間戳作爲整數。我需要按日期和年份訪問這些數據。我可以抓取年份並將其與表格中存在的列行進行匹配,但需要從時間戳中獲取月份名稱。從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是包含時間戳

    回答

    2

    你需要將其轉換爲日期首先使用FROM_UNIXTIME

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

    一點題外話,查詢很容易受到與SQL Injection如果該值(小號)是從哪裏來的外。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements,你可以擺脫圍繞值使用單引號。

    +0

    感謝 - 感謝的額外信息。我在輸入的變量上使用了'mysqli_real_escape_string()',這將避免任何mysqli注入嘗試? – Sideshow

    +1

    但仍然要小心:[SQL注入繞過mysql_real_escape_string()](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) –

    2

    你只需要包裝在FROM_UNIXTIME()首先將它轉換成一個MySQL DATETIME這是由MONTHNAME()

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

    如果你夠早在需要的列這個項目稍微改變方向,我會建議將該值存儲爲適當的DATETIME類型,而不是int值Unix時間戳。 MySQL能夠更好地處理日期類型,而不必一直與UNIX_TIMESTMAP(), FROM_UNIXTIME()進行轉換。

    我們假設您的價值$month已正確轉義,如果它源自用戶輸入。否則,請考慮切換到支持MySQLi或PDO等預準備語句的API。

    相關問題