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
기타
- mysqli_query() - 데이터베이스에 대한 쿼리를 수행합니다.
- mysqli_use_result() - 결과 집합 검색 시작
- mysqli_store_result() - 마지막 쿼리의 결과 집합을 전송합니다.
- mysqli_next_result() - multi_query의 다음 결과 준비
- mysqli_more_results() - 다중 쿼리의 쿼리 결과가 더 있는지 확인