PHP批量更新數據表數據的函數,拼接成SQL更新語句

    private function doBatchModify($data = [], $table = '')
    {
        $tableModel = M("{$table}");
        if (count($data) == 0 || empty($table)) exit('參數缺少');
        //獲取所有的id
        $data_keys = array_keys($data);
        $col = $tableModel->query("SHOW COLUMNS FROM {$table}");
        $cols = [];
        array_map(function ($value) use (&$cols) {
            $cols[] = $value['field'];
        }, $col);
        //拼接批量更新sql語句
        $sql = "UPDATE {$table} SET ";
        //合成sql語句
        foreach ($data[$data_keys[0]] as $key => $value) {
            if (!in_array($key, $cols)) continue;
            $sql .= "{$key} = CASE id ";
            foreach ($data as $k => $v) {
                $sql .= sprintf("WHEN %d THEN '%s' ", $k, $v[$key]);
            }
            $sql .= "END, ";
        }
        //把最後一個,去掉
        $sql = substr($sql, 0, strrpos($sql, ','));
        //合併所有id
        $ids = implode(',', $data_keys);
        //拼接sql
        $sql .= " WHERE id IN ({$ids})";
        //var_dump($sql);
        $resNum = $tableModel->execute($sql);
        return $resNum;
    }
$data = array(
    11 => array('title' => '語文', 'score' => 135),
    12 => array('title' => '數學', 'score' => 145),
    13 => array('title' => '英文', 'score' => 140)
);
$table = 'exam';
$this->doBatchModify($data, $table);

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章