/**
*封装一个 自动 更新的方法
* @param $data array 需要更新的字段和值的关联数组
* @param $where_str string 更新条件 默认没有条件
* @return bool 更新成功为真 失败为假
*/
public function autoUpdate($data, $where_str='') {
//语句开始, sql语句的开始部分
$query = "update {$this->getTable()} set ";
//拼凑字段了
//清理字段
//判断用户传递进来的数组的下标,即字段是否在数据库的字段内,如果不存在, 则把该数组元素从数组中移除
foreach($data as $key=>$value) {
if(in_array($key, $this->fields)) {
//正确的字段
//将符合条件的字段 先 组成 key='value'的形式放入一个数组
$fields[] = "{$key}='{$value}'";
} else {
unset($data[$key]);
}
}
//拼凑字段部分
//我们把fields数组的值部分用都好连接起来 形成 values(部分)
$fields_str = implode(', ', $fields);
$query .= $fields_str;
//拼凑条件部分
// "where category_id='1'"
if($where_str == '') {//判断用户是否传递更新条件
//没有传递
//判断主键,把主键当作条件, 主键字段的值为$data数据中保存的值, 如果在$data中没有发现主键, 则结束自动更新
$_pk = $this->fields['_pk'];
if(array_key_exists($_pk, $data)) {
//主键存在,使用主键作为条件
$where_str = " where {$_pk}='{$data[$_pk]}' ";
} else {
//主键不存在 不予更新
return false;
}
} else {
//传递 , 把用户传递的条件当作更新条件
$where_str = " where {$where_str} ";
}
$query .= $where_str;
//执行查询语句
return $this->query($query);
}
后记:
该方法就就是 依据用户传入的 字段 值 关联数组,更新, 如果用户没有传入更新条件, 则去 用户传入的 字段 值这个关联数组中去找。