我有一个表将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
是包含时间戳
答案 0 :(得分:2)
您只需将其打包在FROM_UNIXTIME()
中,将其首先转换为DATETIME
所需的MySQL MONTHNAME()
AND MONTHNAME(FROM_UNIXTIME(comp_date)) = '$month'
如果你在这个项目中足够早地稍微改变方向,我建议将值存储为正确的DATETIME
类型而不是int值Unix时间戳。 MySQL能够更好地本地处理日期类型,而无需始终使用UNIX_TIMESTMAP(), FROM_UNIXTIME()
进行转换。
如果来自用户输入,我们假设您的值$month
已正确转义。否则,请考虑切换到支持MySQLi或PDO等预处理语句的API。
答案 1 :(得分:2)
您需要先使用FROM_UNIXTIME
MONTHNAME(FROM_UNIXTIME(comp_date)) = '$month'
作为旁注,如果值( s )来自外部,则查询容易被SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。