[SQL] PHP : 하나 개는 mysql_query 문에 여러 SQL 쿼리
SQLPHP : 하나 개는 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.당신은 문자열 내에서 단지 세미콜론보다 더 많은 문제 사례가있다.
당신은 문자열 내에서 단지 세미콜론보다 더 많은 문제 사례가있다.
나는 MySQL의 명령 줄 클라이언트에게 포격없이이 작업을 처리 할 수있는 쉬운 방법을 알고하지 않습니다. 나는 당신이 당신이 클라이언트 인 존재에 의존 수 없다고 실현,하지만 클라이언트없이, 당신은 스크립트를 구문 분석하고 적절하게 문을 실행할 PHP 코드의 많은 양이 필요합니다.
당신은 phpMyAdmin을 제품 내부에 이러한 코드를 찾을 수 있습니다. 그러나이 제품은 코드 중 하나를 사용하는 경우 그래서, 당신은 또한 GPL하에 자신의 프로젝트를 허가해야하며, GPL 라이센스있다.
이러한 관련 질문도 내 대답을 참조하십시오 :
-
==============================
2.오캄의 면도날은 다시 친다.
오캄의 면도날은 다시 친다.
값에 세미콜론이 있기 때문에 위의 폭발 () 함수는 작업에가는되지 않았습니다. 그러나, 내가 무엇을 실현하는 데 실패 (그리고 언급은) 항상 SQL 덤프 파일에 뉴 라인보다 선행하는 세미콜론입니다. 아아,
$sql = explode(";\n", file_get_contents('dump.sql')); foreach ($sql as $key => $val) { mysql_query($val); }
또한, 당신의 도움, 빌 주셔서 감사합니다.
-
==============================
3.여기에 더 큰 문제가 있습니다. 당신은 다른 진술에 의존 문이있을 수 있습니다. 당신은 선형 맹목적를 실행할 수 없습니다.
여기에 더 큰 문제가 있습니다. 당신은 다른 진술에 의존 문이있을 수 있습니다. 당신은 선형 맹목적를 실행할 수 없습니다.
-
==============================
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); } ?>
from https://stackoverflow.com/questions/345637/php-multiple-sql-queries-in-one-mysql-query-statement by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 동적 오라클 Pivot_In_Clause (0) | 2020.04.17 |
---|---|
[SQL] 고유 기록에 PIVOT 쿼리 (0) | 2020.04.16 |
[SQL] SQL 문에서 ASP 변수를 사용하는 방법 (0) | 2020.04.16 |
[SQL] 페이지로드의 쿼리를 삽입, 두 번 삽입? (0) | 2020.04.16 |
[SQL] 왜 SQL 쿼리의 결과는 내가 예상 한 순서대로 돌아 오지 않는다? (0) | 2020.04.16 |