Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pisahkan kueri mysql dalam array, setiap kueri dipisahkan oleh;

Diberikan string yang berisi beberapa pernyataan SQL yang dipisahkan titik koma, fungsi berikut mem-parsing setiap pernyataan individual dan mengembalikan semuanya dalam array. Ini menggunakan satu regex (non-sepele), dan satu panggilan ke preg_match_all() , dan menangani komentar tunggal dan multi-baris dengan benar, dan string yang dikutip tunggal dan ganda, (masing-masing dapat berisi titik koma yang tidak diakhiri untuk diabaikan):

function split_sql($sql_text) {
    // Return array of ; terminated SQL statements in $sql_text.
    $re_split_sql = '%(?#!php/x re_split_sql Rev:20170816_0600)
        # Match an SQL record ending with ";"
        \s*                                     # Discard leading whitespace.
        (                                       # $1: Trimmed non-empty SQL record.
          (?:                                   # Group for content alternatives.
            \'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'  # Either a single quoted string,
          | "[^"\\\\]*(?:\\\\.[^"\\\\]*)*"      # or a double quoted string,
          | /\*[^*]*\*+(?:[^*/][^*]*\*+)*/      # or a multi-line comment,
          | \#.*                                # or a # single line comment,
          | --.*                                # or a -- single line comment,
          | [^"\';#]                            # or one non-["\';#-]
          )+                                    # One or more content alternatives
          (?:;|$)                               # Record end is a ; or string end.
        )                                       # End $1: Trimmed SQL record.
        %x';  // End $re_split_sql.
    if (preg_match_all($re_split_sql, $sql_text, $matches)) {
        return $matches[1];
    }
    return array();
}

Edit 15-08-2017: Memperbaiki kesalahan dalam bagian komentar multiline dari regex yang ditunjukkan oleh @jxmallett.Edit 16-08-2017: Regex yang dirapikan (menambahkan regex shebang dan menghapus grup yang tidak perlu $2 ).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memilih semua kolom yang dimulai dengan XXX menggunakan karakter pengganti?

  2. Bagaimana mencegah duplikat sisipan ke dalam tabel

  3. Bagaimana cara membuat alamat email untuk anggota situs web saya secara otomatis?

  4. Cara Mengubah Format Datetime di MySQL

  5. Jumlah item MySQL di dalam klausa