mysqli_stmt::prepare

(PHP 5, PHP 7, PHP 8)

mysqli_stmt::prepare -- mysqli_stmt_prepare — 실행을 위한 SQL 문 준비


설명

객체 지향 스타일

public mysqli_stmt::prepare(string $query): bool

절차적 스타일

mysqli_stmt_prepare(mysqli_stmt $statement, string $query): bool

실행할 명령문을 준비합니다. 쿼리는 단일 SQL 문으로 구성되어야 합니다.

명령문 템플릿에는 자리 표시자라고도 하는 0개 이상의 물음표(?) 매개변수 마커가 포함될 수 있습니다. 매개변수 마커는 명령문을 실행하기 전에 mysqli_stmt_bind_param()을 사용하여 애플리케이션 변수에 바인딩되어야 합니다.

메모:

mysqli_stmt_prepare()에 서버의 max_allowed_packet보다 긴 문장을 전달하는 경우, MySQL Native Driver(mysqlnd)를 사용하는지, MySQL 클라이언트 라이브러리(libmysqlclient)를 사용하는지에 따라 반환되는 에러 코드가 다릅니다. 동작은 다음과 같습니다.

  • Linux의 mysqlnd는 1153의 오류 코드를 반환합니다. 오류 메시지는 max_allowed_packet 바이트보다 큰 패킷이 있음을 의미합니다.
  • Windows의 mysqlnd는 오류 코드 2006을 반환합니다. 이 오류 메시지는 server has gone away을 의미합니다.
  • 모든 플랫폼의 libmysqlclient는 오류 코드 2006을 반환합니다. 이 오류 메시지는 server has gone away을 의미합니다.

매개변수

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

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

메모:

마커는 SQL 문의 특정 위치에서만 유효합니다. 예를 들어, INSERT 문의 VALUES() 목록(행에 대한 열 값 지정) 또는 WHERE 절의 열과 비교하여 비교 값을 지정할 수 있습니다.

그러나 식별자(예: 테이블 또는 열 이름)에 대해 또는 = 등호와 같은 이항 연산자의 두 피연산자를 모두 지정하는 데에는 허용되지 않습니다. 후자의 제한은 매개변수 유형을 결정하는 것이 불가능하기 때문에 필요합니다. 일반적으로 매개변수는 DML(데이터 조작 언어) 문에서만 유효하고 DDL(데이터 정의어) 문에서는 유효하지 않습니다.


반환 값

성공하면 true를, 실패하면 false를 반환합니다.


Examples

예제 #1 mysqli_stmt::prepare() 예제

객체 지향 스타일

                  
<?php

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

$city = "Amersfoort";

/* create a prepared statement */
$stmt = $mysqli->stmt_init();
$stmt->prepare("SELECT District FROM City WHERE Name=?");

/* bind parameters for markers */
$stmt->bind_param("s", $city);

/* execute query */
$stmt->execute();

/* bind result variables */
$stmt->bind_result($district);

/* fetch value */
$stmt->fetch();

printf("%s is in district %s\n", $city, $district);
                  
                

절차적 스타일

                  
<?php

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

$city = "Amersfoort";

/* create a prepared statement */
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, "SELECT District FROM City WHERE Name=?");

/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "s", $city);

/* execute query */
mysqli_stmt_execute($stmt);

/* bind result variables */
mysqli_stmt_bind_result($stmt, $district);

/* fetch value */
mysqli_stmt_fetch($stmt);

printf("%s is in district %s\n", $city, $district);
                  
                

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

Amersfoort is in district Utrecht
                

기타