mysqli_prepare ()는 sql 문을 준비하는 데 사용되며 mysqli_stmt 문장을 반환합니다. 예를 들어:
$mysqli = new mysqli("m66.net", "username", "password", "database");
if ($mysqli->connect_error) {
die("연결이 실패했습니다: " . $mysqli->connect_error);
}
$sql = "SELECT * FROM users WHERE email = ?";
$stmt = $mysqli->prepare($sql);
if (!$stmt) {
die("전처리가 실패했습니다: " . $mysqli->error);
}
여기, ? 매개 변수 자리 표시 자이며, 특정 값은 향후 BIND_PARAM을 통해 바인딩됩니다.
MySQLI_STMT 객체는 일부 속성의 획득 및 설정을 지원하여 전처리 문의 동작을 제어 할 수 있습니다. PHP는 두 가지 관련 방법을 제공합니다.
attr_get ($ attr) : 지정된 속성의 현재 값을 가져옵니다.
attr_set ($ attr, $ value) : 지정된 속성의 값을 설정합니다.
예를 들어, MySQLI에서 지원하는 속성 상수는 다음과 같습니다.
mysqli_stmt_attr_update_max_length : 최대 길이를 업데이트할지 여부를 제어합니다.
mysqli_stmt_attr_cursor_type : 커서 유형을 설정합니다 (예 : 비 쿠저, 읽기 전용 커서 등).
mysqli_stmt_attr_prefetch_rows : 프리 페치 행의 수.
커서를 사용하여 많은 양의 데이터를 처리하고 모든 결과 세트를 한 번에로드하지 않으려면 커서 속성을 설정할 수 있다고 가정 해 봅시다.
$sql = "SELECT * FROM large_table WHERE category = ?";
$stmt = $mysqli->prepare($sql);
if (!$stmt) {
die("전처리가 실패했습니다: " . $mysqli->error);
}
// 커서 유형을 설정하십시오 MYSQLI_CURSOR_TYPE_READ_ONLY
$stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY);
// 바인딩 매개 변수
$category = 'books';
$stmt->bind_param("s", $category);
$stmt->execute();
// 현재 커서 유형을 가져옵니다
$currentCursorType = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
echo "현재 커서 유형은입니다: " . $currentCursorType . PHP_EOL;
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
print_r($row);
}
$stmt->close();
$mysqli->close();
위의 예는 명령문을 준비한 후 커서 유형을 설정하고 attr_get () 로 현재 속성을 확인하는 방법을 보여줍니다.
Execute ()을 호출하기 전에 Cursor 유형, 프리 페치 행 카운트 등과 같은 필요한 모든 속성을 실행 중에 적용 할 수 있도록 가능한 한 많이 설정하십시오.
전처리 및 속성 설정이 모두 실패 할 수 있습니다. 런타임 충돌을 피하기 위해 반환 값을 감지하고 오류를 잘 처리하십시오.
커서 유형은 메모리와 성능에 영향을 미치며 특히 큰 결과 세트를 처리 할 때 읽기 전용 커서 ( MySQLI_CURSOR_TYPE_READ_ONLY )가 일반적으로 더 나은 선택입니다.
일부 속성은 이전 버전의 MySQL 서버 또는 PHP 버전에서는 지원되지 않을 수 있습니다. 개발 중 대상 환경의 지원을 확인해야합니다.
MySQLI_PREPARE ()를 합리적으로 결합하여 MySQLI_STMT :: ATT_GET 및 ATT_SET는 코드의 보안을 유지하면서 데이터베이스 작업을보다 유연하고 효율적으로 만들 수 있습니다. 적절한 속성, 특히 커서 및 프리 페치 행 카운트를 설정하면 많은 양의 데이터를 처리 할 때 성능 및 리소스 사용량을 크게 최적화 할 수 있습니다.