php mysql选择列值,它们的值小于当前时间(timestamp)

时间:2013-05-12 14:34:38

标签: mysql

好吧,所以我想做的是一个简单的任务,但我仍然没有得到它。 我想从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();
}

我得到的结果是零。

如果我把

last_action > $time

我得到“3”

我不明白......

1 个答案:

答案 0 :(得分:0)

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

MySQL的文字字符串值$time被强制转换为整数,任何非数字字符串都会被强制转换为零。

MySQL正在执行:

SELECT * FROM session WHERE last_action < 0

切换引号 - 最好是在SQL中使用单引号围绕变量,这是好的做法,实际上因为它是由time()生成的整数值(已知不需要转义),所以不需要引用。

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

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