Mysql
 sql >> база данни >  >> RDS >> Mysql

Разделете mysql заявките в масив, като всяка заявка е разделена с;

При даден низ, съдържащ множество SQL изрази, разделени с точка и запетая, следната функция анализира всеки отделен израз и ги връща всички в масив. Той използва един (нетривиален) регулярен израз и едно извикване на preg_match_all() и правилно обработва едноредови и многоредови коментари и низове в единични и двойни кавички (всеки от които може да съдържа незавършващи точки и запетая, които трябва да се игнорират):

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();
}

Редактиране 2017-08-15: Коригирана грешка в частта с многоредови коментари на регулярния израз, посочена от @jxmallett.Редактиране 2017-08-16: Подреден regex (добавен regex shebang и премахната ненужна група $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. Търсете поръчки, които имат два продукта, един със специфична препратка, друг с конкретно описание

  2. Как бързо да сортирате отново MySQL таблица по една от колоните?

  3. възможно ли е вмъкване въз основа на избор на една от колоните в MySQL?

  4. Изявление за актуализиране на Python MYSQL

  5. Грешка в MySQL:Имате грешка във вашия SQL синтаксис; проверете ръководството, което съответства на версията на вашия MySQL сървър за правилния синтаксис, който да използвате близо