where操作希望增强的一些地方

浏览:860 发布日期:2015/05/04
3.2.3 - 普通 - 已关闭
当想要使用in语句时,如果数组是文本型,生成的$where会被忽略,导致查询是查询整表信息

$where[‘name’]=array(‘in’,array(‘张三’,’李四’));
$data = M(‘users')->where($where)->select();


从期望值来说,希望生成的语句应该是

select * from tp_users where name in (‘张三’,’李四')

但实际上。因为该in操作的内容是文本型,导致sql语句是

select * from tp_users

而当该表数据量较大(20w)时,又会直接跳掉,执行失败。导致数据出不来。

解决办法 :目前遇上此类方法时,先用
function array_to_sqlin($array){
if(!is_array($array)){
return "";
}
$str = "'".implode("','", $array)."'";
return $str;
}

手工拼接一个in语句,然后再生成sql条件
unset ( $where );
$names = array(‘张三’,’李四’);
$instr = array_to_sqlin($names);
$where = "ajbs in ($instr)";

另外,在使用一些表的时候,有些字段可能是大写的,在mysql中查询是大小写不敏感的(作为条件),但是使用where($where)来进行查询时,如果条件是非大写,会导致生成的sql会忽略掉查询条件。从而导致查询全表,而导致内存溢出而返回空白页停止执行。也非常让人烦恼啊

评论(
后面还有条评论,点击查看>>