这是我用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”
我不明白......
答案 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中的参数绑定而不是直接传递给查询,则可以避免这种情况。