mysqli::execute_query

mysqli_execute_query

(PHP 8 >= 8.2.0)

mysqli::execute_query -- mysqli_execute_query — SQL 문 준비, 매개변수 바인딩 및 실행


설명

객체 지향 스타일

public mysqli::execute_query(string $query, ?array $params = null): mysqli_result|bool

절차적 스타일

mysqli_execute_query(mysqli $mysql, string $query, ?array $params = null): mysqli_result|bool

SQL 쿼리를 준비하고 매개 변수를 바인딩하고 실행합니다. mysqli::execute_query() 메소드는 mysqli::prepare(), mysqli_stmt::bind_param(), mysqli_stmt::execute(), mysqli_stmt::get_result()의 단축키이다.

명령문 템플릿에는 자리 표시자라고도 하는 0개 이상의 물음표(?) 매개변수 마커가 포함될 수 있습니다. 매개변수 값은 params 매개변수를 사용하여 배열로 제공되어야 합니다.

준비된 문은 후드 아래에서 생성되지만 함수 외부에는 노출되지 않습니다. mysqli_stmt 객체와 마찬가지로 문의 속성에 액세스하는 것은 불가능합니다. 이러한 제한으로 인해 상태 정보는 mysqli 객체에 복사되고 해당 메서드를 사용하여 사용할 수 있습니다. mysqli_affected_rows() 또는 mysqli_error().

메모:

mysqli_execute_query()에 서버의 max_allowed_packet보다 긴 문장을 전달하는 경우, 반환되는 에러 코드는 운영체제에 따라 다르다. 동작은 다음과 같습니다.

  • Linux에서 오류 코드 1153을 반환합니다. 오류 메시지는 max_allowed_packet 바이트보다 큰 패킷이 있음을 의미합니다.
  • Windows에서 오류 코드 2006을 반환합니다. 이 오류 메시지는 서버가 사라졌음을 의미합니다.

매개변수

mysql
절차적 스타일 전용: mysqli_connect() 또는 mysqli_init()에 의해 반환된 mysqli 객체
query
쿼리, 문자열. 단일 SQL 문으로 구성되어야 합니다.

SQL문은 적절한 위치에 물음표(?) 문자로 표시되는 매개변수 표시문자를 0개 이상 포함할 수 있습니다.

메모:

마커는 SQL 문의 특정 위치에서만 유효합니다. 예를 들어, INSERT 문의 VALUES() 목록(행에 대한 열 값 지정) 또는 WHERE 절의 열과 비교하여 비교 값을 지정할 수 있습니다. 그러나 식별자(예: 테이블 또는 열 이름)에는 허용되지 않습니다.

params
실행 중인 SQL 문에 바인딩된 매개 변수 수만큼 요소가 있는 선택적 목록 배열입니다. 각 값은 문자열로 처리됩니다.

반환 값

실패 시 false를 반환합니다. SELECT, SHOW, DESCRIBE 또는 EXPLAIN과 같은 결과 집합을 생성하는 성공적인 쿼리의 경우 mysqli_result 객체를 반환합니다. 다른 성공적인 쿼리의 경우 true를 반환합니다.


Examples

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

객체 지향 스타일

                  
<?php

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

$query = 'SELECT Name, District FROM City WHERE CountryCode=? ORDER BY Name LIMIT 5';
$result = $mysqli->execute_query($query, ['DEU']);
foreach ($result as $row) {
    printf("%s (%s)\n", $row["Name"], $row["District"]);
?>
                  
                

절차적 스타일

                  
<?php

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

$query = 'SELECT Name, District FROM City WHERE CountryCode=? ORDER BY Name LIMIT 5';
$result = mysqli_execute_query($link, $query, ['DEU']);
foreach ($result as $row) {
    printf("%s (%s)\n", $row["Name"], $row["District"]);
}
                  
                

위의 예는 다음과 유사한 결과를 출력합니다.

Aachen (Nordrhein-Westfalen)
Augsburg (Baijeri)
Bergisch Gladbach (Nordrhein-Westfalen)
Berlin (Berliini)
Bielefeld (Nordrhein-Westfalen)
                

기타