Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

thay thế hàng loạt thành cho CodeIgniter Active Record

Nếu bạn muốn sao chép kho lưu trữ của tôi Tôi đã thực hiện. Tôi đã thử để đưa giải pháp vào nhánh chính nhưng có vẻ như narfbg kiên quyết chống lại nó. Có thể có thêm một số sự tham gia của cộng đồng có thể thực hiện được.

/**
 * Replace_Batch
 *
 * Compiles batch insert strings replacing any existing rows and runs the queries
 *
 * @param   string  $table  Table to replace insert into
 * @param   array   $set    An associative array of insert values
 * @param   bool    $escape Whether to escape values and identifiers
 * @return  int Number of rows inserted or FALSE on failure
 */
public function replace_batch($table, $set = NULL, $escape = NULL, $batch_size = 100)
{
    if ($set === NULL)
    {
        if (empty($this->qb_set))
        {
            return ($this->db_debug) ? $this->display_error('db_must_use_set') : FALSE;
        }
    }
    else
    {
        if (empty($set))
        {
            return ($this->db_debug) ? $this->display_error('replace_batch() called with no data') : FALSE;
        }

        $this->set_insert_batch($set, '', $escape);
    }

    if (strlen($table) === 0)
    {
        if ( ! isset($this->qb_from[0]))
        {
            return ($this->db_debug) ? $this->display_error('db_must_set_table') : FALSE;
        }

        $table = $this->qb_from[0];
    }

    // Batch this baby
    $affected_rows = 0;
    for ($i = 0, $total = count($this->qb_set); $i < $total; $i += $batch_size)
    {
        if ($this->query($this->_replace_batch($this->protect_identifiers($table, TRUE, $escape, FALSE), $this->qb_keys, array_slice($this->qb_set, $i, $batch_size))))
        {
            $affected_rows += $this->affected_rows();
        }
    }

    $this->_reset_write();
    return $affected_rows;
}

// --------------------------------------------------------------------

/**
 * Replace batch statement
 *
 * Generates a platform-specific insert string from the supplied data.
 *
 * @param   string  $table  Table name
 * @param   array   $keys   INSERT keys
 * @param   array   $values INSERT values
 * @return  string
 */
protected function _replace_batch($table, $keys, $values)
{
    return 'REPLACE INTO '.$table.' ('.implode(', ', $keys).') VALUES '.implode(', ', $values);
}

Trên đây là mã chính xác giống như trên Github, vì vậy giải pháp có thể lập chỉ mục trở lại stackoverflow.com. Nhưng rất tiếc, câu trả lời của tôi trên stackoverflow bị giới hạn ở 30k ký tự nên tôi không thể dán toàn bộ cam kết cũng bao gồm các thay đổi đối với trình điều khiển db.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ClassNotFoundException khi kết nối với Mysql bằng JDBC

  2. MySQL. Sản phẩm không được bán trong một khoảng thời gian

  3. Truy vấn:Tìm chuỗi trong trường cơ sở dữ liệu

  4. DBMS tốt nhất cho công việc là gì?

  5. Trong khi Vòng lặp sử dụng PHP với máy chủ MySQL