2

好的,所以我想做的是一个简单的任务,但我还是不明白。我想从 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”

我不明白...

4

1 回答 1

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 中作为参数绑定而不是直接传递给查询,这将是可以避免的。

于 2013-05-12T15:24:16.453 回答