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