thinkphp3.2 add 與 addAll的區別
阿新 • • 發佈:2019-02-05
add 與 addAll的區別
add操作生成的sql語句key與value一一對應,但是有時addAll生成的sql語句key與value不是一一對應的
原因
1.add生成sql 的類是Driver,在迴圈fields與$values保持一一對應關係
foreach ($data as $key=>$val){
if(is_array($val) && 'exp' == $val[0]){
$fields[] = $this->parseKey($key);
$values [] = $val[1];
}elseif(is_null($val)){
$fields[] = $this->parseKey($key);
$values[] = 'NULL';
}elseif(is_scalar($val)) { // 過濾非標量資料
$fields[] = $this->parseKey($key);
if(0===strpos($val,':') && in_array($val ,array_keys($this->bind))){
$values[] = $this->parseValue($val);
}else{
$name = count($this->bind);
$values[] = ':'.$name;
$this->bindParam($name,$val);
}
}
2.addAll生成sql 的類是Mysql,先生成data,這是當$val
非法時,就會丟失value,導致不匹配
$fields = array_map(array($this,'parseKey'),array_keys($dataSet[0])); //先生成$fields陣列
foreach ($dataSet as $data){
$value = array();
foreach ($data as $key=>$val){
if(is_array($val) && 'exp' == $val[0]){
$value[] = $val[1];
}elseif(is_scalar($val) || is_null($val)){
if(0===strpos($val,':') && in_array($val,array_keys($this->bind))){
$value[] = $this->parseValue($val);
}else{
$name = count($this->bind);
$value[] = ':'.$name;
$this->bindParam($name,$val);
}
}
}
$values[] = '('.implode(',', $value).')';
}