mysqli::multi_query

(PHP 5, PHP 7, PHP 8)

mysqli::multi_query -- mysqli_multi_query — 데이터베이스에 대해 하나 이상의 쿼리를 수행합니다.


설명

객체 지향 스타일

public mysqli::multi_query(string $query): bool

절차적 스타일

mysqli_multi_query(mysqli $mysql, string $query): bool

세미콜론으로 연결된 하나 이상의 쿼리를 실행합니다.

쿼리는 데이터베이스에 대한 단일 호출에서 비동기적으로 전송되지만 데이터베이스는 쿼리를 순차적으로 처리합니다. mysqli_multi_query()는 PHP에 제어를 반환하기 전에 첫 번째 쿼리가 완료될 때까지 기다립니다. 그런 다음 MySQL 서버는 시퀀스의 다음 쿼리를 처리합니다. 다음 결과가 준비되면 MySQL은 PHP에서 mysqli_next_result()의 다음 실행을 기다립니다.

여러 쿼리를 처리하려면 do-while을 사용하는 것이 좋습니다. 모든 쿼리가 완료되고 결과를 PHP로 가져올 때까지 연결이 사용 중입니다. 모든 쿼리가 처리될 때까지 동일한 연결에서 다른 명령문을 실행할 수 없습니다. 시퀀스의 다음 쿼리로 진행하려면 mysqli_next_result()를 사용하십시오. 다음 결과가 아직 준비되지 않은 경우 mysqli는 MySQL 서버의 응답을 기다립니다. 더 많은 결과가 있는지 확인하려면 mysqli_more_results()를 사용하십시오.

SELECT, SHOW, DESCRIBE 또는 EXPLAIN과 같은 결과 집합을 생성하는 쿼리의 경우 mysqli_use_result() 또는 mysqli_store_result()를 사용하여 결과 집합을 검색할 수 있습니다. 결과 집합을 생성하지 않는 쿼리의 경우 동일한 함수를 사용하여 영향을 받는 행 수와 같은 정보를 검색할 수 있습니다.

저장 프로시저에 대해 CALL 문을 실행하면 여러 결과 집합이 생성될 수 있습니다. 저장 프로시저에 SELECT 문이 포함된 경우 결과 집합은 프로시저가 실행될 때 생성된 순서대로 반환됩니다. 일반적으로 호출자는 프로시저가 반환할 결과 집합의 수를 알 수 없으며 여러 결과를 검색할 준비가 되어 있어야 합니다. 절차의 최종 결과는 결과 집합이 포함되지 않은 상태 결과입니다. 상태는 절차가 성공했는지 또는 오류가 발생했는지 나타냅니다.


매개변수

mysql
절차적 스타일 전용: mysqli_connect() 또는 mysqli_init()에 의해 반환된 mysqli 객체
query
실행할 쿼리가 포함된 문자열입니다. 여러 쿼리는 세미콜론으로 구분해야 합니다.

경고

보안 경고: SQL 주입

쿼리에 변수 입력이 포함된 경우 매개변수화된 준비된 명령문을 대신 사용해야 합니다. 또는 데이터 형식이 적절해야 하고 모든 문자열은 mysqli_real_escape_string() 함수를 사용하여 이스케이프되어야 합니다.


반환 값

첫 번째 문이 실패하면 false를 반환합니다. 다른 명령문에서 후속 오류를 검색하려면 먼저 mysqli_next_result()를 호출해야 합니다.


Examples

예제 #1 mysqli::multi_query() 예제

객체 지향 스타일

                  
<?php

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

$query = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";

/* execute multi query */
$mysqli->multi_query($query);
do {
    /* store the result set in PHP */
    if ($result = $mysqli->store_result()) {
        while ($row = $result->fetch_row()) {
            printf("%s\n", $row[0]);
        }
    }
    /* print divider */
    if ($mysqli->more_results()) {
        printf("-----------------\n");
    }
} while ($mysqli->next_result());
                  
                

절차적 스타일

                  
<?php

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

$query = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";

/* execute multi query */
mysqli_multi_query($link, $query);
do {
    /* store the result set in PHP */
    if ($result = mysqli_store_result($link)) {
        while ($row = mysqli_fetch_row($result)) {
            printf("%s\n", $row[0]);
        }
    }
    /* print divider */
    if (mysqli_more_results($link)) {
        printf("-----------------\n");
    }
} while (mysqli_next_result($link));
                  
                

위의 예는 다음을 출력합니다.

my_user@localhost
-----------------
Amersfoort
Maastricht
Dordrecht
Leiden
Haarlemmermeer
                

기타