복붙노트

[SQL] PHP : 하나 개는 mysql_query 문에 여러 SQL 쿼리

SQL

PHP : 하나 개는 mysql_query 문에 여러 SQL 쿼리

내가 필요가는 mysql_query를 사용하여로드 할 수 있다는 SQL 덤프 파일이 그래서 (). 불행하게도, 그것은 여러 쿼리를 실행할 수 없습니다.

- 직접 SQL 파일을로드하기위한 -> MySQL의 명령 줄 클라이언트 (mysql을 --help)가 설치되어 있다고 가정 할 수 없다

-> mysqli 확장이 설치되어 있다고 가정 할 수 없다

/* contents of dump.sql, including comments */
DELETE FROM t3 WHERE body = 'some text; with semicolons; scattered; throughout';
DELETE FROM t2 WHERE name = 'hello';
DELETE FROM t1 WHERE id = 1;

작동하지 않습니다 아래의 덤프 내용의 일부 값은 세미콜론을 포함하고 있기 때문에 ()는 폭발.

$sql = explode(';', file_get_contents('dump.sql'));
foreach ($sql as $key => $val) {
    mysql_query($val);
}

덤프 파일을 수정하지 않고 SQL을로드하는 가장 좋은 방법은 무엇입니까?

해결법

  1. ==============================

    1.당신은 문자열 내에서 단지 세미콜론보다 더 많은 문제 사례가있다.

    당신은 문자열 내에서 단지 세미콜론보다 더 많은 문제 사례가있다.

    나는 MySQL의 명령 줄 클라이언트에게 포격없이이 작업을 처리 할 수있는 쉬운 방법을 알고하지 않습니다. 나는 당신이 당신이 클라이언트 인 존재에 의존 수 없다고 실현,하지만 클라이언트없이, 당신은 스크립트를 구문 분석하고 적절하게 문을 실행할 PHP 코드의 많은 양이 필요합니다.

    당신은 phpMyAdmin을 제품 내부에 이러한 코드를 찾을 수 있습니다. 그러나이 제품은 코드 중 하나를 사용하는 경우 그래서, 당신은 또한 GPL하에 자신의 프로젝트를 허가해야하며, GPL 라이센스있다.

    이러한 관련 질문도 내 대답을 참조하십시오 :

  2. ==============================

    2.오캄의 면도날은 다시 친다.

    오캄의 면도날은 다시 친다.

    값에 세미콜론이 있기 때문에 위의 폭발 () 함수는 작업에가는되지 않았습니다. 그러나, 내가 무엇을 실현하는 데 실패 (그리고 언급은) 항상 SQL 덤프 파일에 뉴 라인보다 선행하는 세미콜론입니다. 아아,

    $sql = explode(";\n", file_get_contents('dump.sql'));
    foreach ($sql as $key => $val) {
        mysql_query($val);
    }
    

    또한, 당신의 도움, 빌 주셔서 감사합니다.

  3. ==============================

    3.여기에 더 큰 문제가 있습니다. 당신은 다른 진술에 의존 문이있을 수 있습니다. 당신은 선형 맹목적를 실행할 수 없습니다.

    여기에 더 큰 문제가 있습니다. 당신은 다른 진술에 의존 문이있을 수 있습니다. 당신은 선형 맹목적를 실행할 수 없습니다.

  4. ==============================

    4.

    <?php
    //STATIC QUERY
    $sql1 = "
    CREATE TABLE tblTable (
    strOne VARCHAR(50) NOT NULL,
    strTwo VARCHAR(50) NOT NULL,
    strThree VARCHAR(50) NOT NULL
    );
    INSERT INTO tblTable
    (strOne, strTwo, strThree)
    VALUES ('String 1', 'String 2', 'String 3');
    UPDATE tblTable
    SET
    strOne = 'String One',
    strTwo = 'String Two'
    WHERE strThree = 'String 3';
    "; 
    //GET FROM FILE
    $sql2 = file_get_contents('dump.sql');
    $queries = preg_split("/;+(?=([^'|^\\\']*['|\\\'][^'|^\\\']*['|\\\'])*[^'|^\\\']*[^'|^\\\']$)/", $sql);
    foreach ($queries as $query){
       if (strlen(trim($query)) > 0) mysql_query($query);
    }
    ?>
    
  5. from https://stackoverflow.com/questions/345637/php-multiple-sql-queries-in-one-mysql-query-statement by cc-by-sa and MIT license