php mysql选择其值小于当前时间(时间戳)的列

php mysql选择其值小于当前时间(时间戳)的列,mysql,Mysql,好的,所以我想做的是一个简单的任务,但我还是不明白。 我只想从MySql表中选择“last_action”列值小于当前时间(由php函数time()生成的时间戳)的行 很明显,以前插入的所有值都小于当前时间:),但我不知道为什么我的简单脚本不相信“我的直觉”: 下面是我用CODEIGNITER编写的php函数,这没什么大不了的,查询很重要: function get_exp_sessions(){ $time = time(); $query = $this->db->

好的,所以我想做的是一个简单的任务,但我还是不明白。 我只想从MySql表中选择“last_action”列值小于当前时间(由php函数time()生成的时间戳)的行

很明显,以前插入的所有值都小于当前时间:),但我不知道为什么我的简单脚本不相信“我的直觉”:

下面是我用CODEIGNITER编写的php函数,这没什么大不了的,查询很重要:

function get_exp_sessions(){
    $time = time();
    $query = $this->db->query('SELECT * FROM session WHERE last_action < "$time"');

    echo $query->num_rows();
}
我得到“3”


我不明白…

现在我看到了。你的报价不正确。在外部字符串上有单引号,这会导致变量
$time
不会在字符串中插入,而是按字面意思作为
$time
传递

MySQL将文本字符串值
$time
转换为整数,任何非数字字符串都将转换为零

MySQL正在执行:

SELECT * FROM session WHERE last_action < 0

虽然在这种情况下并非绝对必要,但如果
$time
已作为Codeigniter中的参数绑定,而不是直接传递给查询,则可以避免这种情况。

它们是如何插入的?您使用的是PHP
time()
还是MySQL
NOW()
?服务器时区是否与php.ini中注册为
date\u default\u timezone
的时区匹配?另外,
last\u action
是MySQL中的INT列,还是与php的时间戳相比需要转换的
DATETIME
。最后一个动作被设置为INT。时区我不知道它是否重要,因为我所有的动作都来自同一台机器,同一台服务器。我甚至比较了数据库中的数字,并回显了当前的时间戳。确保数据库中的值较小。MySQL应该为您这样做,但为了确保,您在时间戳周围使用了
,这将指示一个字符串,严格来说,“1”不是1@user348078这是一个引用的问题。请参见下面的@user348078文档:
SELECT * FROM session WHERE last_action < 0
$query = $this->db->query("SELECT * FROM session WHERE last_action < $time");