php中实现用数组妩媚地生成要执行的sql语句
会不会碰到这样一种情况呢?每次获取数据将数据和历史版本都有一定的差别,然而用ThinkPHP的addAll()函数,却会将已有的数据删掉再重新写入。这明显不是我们想要的。但自己写sql每次几十个字段也是醉了。如何优雅而又轻松地实现sql的自动生成呢?于是有了下面这个方法。
/**
*[array_to_sql根据数组key和value拼接成需要的sql]
*@param[type]$array[key,value结构数组]
*@paramstring$type[sql类型insert,update]
*@paramarray$exclude[排除的字段]
*@return[string][返回拼接好的sql]
*/
functionarray_to_sql($array,$type='insert',$exclude=array()){
$sql='';
if(count($array)>0){
foreach($excludeas$exkey){
unset($array[$exkey]);//剔除不要的key
}
if('insert'==$type){
$keys=array_keys($array);
$values=array_values($array);
$col=implode("`,`",$keys);
$val=implode("','",$values);
$sql="(`$col`)values('$val')";
}elseif('update'==$type){
$tempsql='';
$temparr=array();
foreach($arrayas$key=>$value){
$tempsql="'$key'='$value'";
$temparr[]=$tempsql;
}
$sql=implode(",",$temparr);
}
}
return$sql;
}
当然,这个方法还有很多可以斟酌的地方。能用,但不是最好的。园子的猿猿们你们有更好的方法吗?请告诉我吧!