php mysql选择其值小于当前时间(时间戳)的列
好的,所以我想做的是一个简单的任务,但我还是不明白。 我只想从MySql表中选择“last_action”列值小于当前时间(由php函数time()生成的时间戳)的行 很明显,以前插入的所有值都小于当前时间:),但我不知道为什么我的简单脚本不相信“我的直觉”: 下面是我用CODEIGNITER编写的php函数,这没什么大不了的,查询很重要:php mysql选择其值小于当前时间(时间戳)的列,mysql,Mysql,好的,所以我想做的是一个简单的任务,但我还是不明白。 我只想从MySql表中选择“last_action”列值小于当前时间(由php函数time()生成的时间戳)的行 很明显,以前插入的所有值都小于当前时间:),但我不知道为什么我的简单脚本不相信“我的直觉”: 下面是我用CODEIGNITER编写的php函数,这没什么大不了的,查询很重要: function get_exp_sessions(){ $time = time(); $query = $this->db->
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中的参数绑定,而不是直接传递给查询,则可以避免这种情况。它们是如何插入的?您使用的是PHPtime()
还是MySQLNOW()
?服务器时区是否与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");