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()首先将其转换为 MySQLDATETIME所需的MONTHNAME()

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

如果你在这个项目中足够早地改变方向,我建议将值存储为适当的DATETIME类型,而不是 int 值 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如果值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用 PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-01-16T14:30:44.887 回答