好的,所以我试着做的是一个简单的任务,但我仍然不明白。我只想从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“
我不明白..。
发布于 2013-05-12 23:24:16
现在我明白了。您的报价不正确。外部字符串上有单引号,这导致变量$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中的参数,而不是直接传递给查询,那么这是可以避免的。
https://stackoverflow.com/questions/16508452
复制相似问题