PHP 개발에서 데이터베이스 작업에 MySQLI 확장을 사용하는 것이 일반적입니다. MySQLI는 객체 지향 인터페이스 및 전처리 명령문 기능을 제공하여 데이터베이스 액세스를보다 안전하고 효율적으로 만듭니다. mysqli_stmt :: attr_get은 전처리 명령문의 속성을 얻는 데 사용되는 MySQLI 전처리 명령문의 메소드입니다. 일부 디버깅 또는 고급 제어 시나리오에 유용하지만 많은 개발자가 우려 할 것입니다. 쿼리 성능 에이 기능을 부르는 데 얼마나 많은 영향을 미칩니 까?
mysqli_stmt :: attr_get을 사용하면 개발자가 전처리 문을 실행할 때 특정 속성 값을 얻을 수 있습니다. 일반적으로 사용되는 속성에는 다음이 포함됩니다.
mysqli_stmt_attr_update_max_length : 최대 길이 정보를 업데이트할지 여부.
mysqli_stmt_attr_cursor_type : 커서 유형.
mysqli_stmt_attr_prefetch_rows : 프리 페치 행의 수.
이 기능을 호출하기위한 구문은 다음과 같습니다.
$attr_value = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
SQL 문을 실행하지는 않지만 사전 처리 된 명령문 객체의 특정 속성 값을 반환합니다.
PHP 코드 실행의 관점에서 attr_get은 오버 헤드가 매우 작은 간단한 속성 읽기 작업 일뿐입니다. 데이터베이스 상호 작용을 유발하지 않으며 추가 쿼리를 수행하지 않으므로 단일 호출은 성능에 거의 영향을 미치지 않습니다.
전처리 진술의 성능 병목 현상은 일반적으로 다음과 같습니다.
진술 준비 단계를 준비하십시오
매개 변수 바인딩 및 데이터 전송
명령문 실행 및 결과 세트 처리
Att_get은 메모리의 속성 상태 만 쿼리하며 네트워크 통신 및 데이터베이스 리소스 소비를 포함하지 않습니다. 따라서 이와 관련하여 성능 영향은 최소화됩니다.
attr_get이 비즈니스 로직에서 자주 호출되는 경우 (예를 들어, 루프에서 속성을 반복적으로 얻는) 이론적으로 약간의 CPU 오버 헤드를 유발하지만 일반적 으로이 사용량은 일반적이지 않습니다. 전화 지점을 합리적으로 설계하여 필요할 때만 호출되도록하십시오.
다음은 mysqli_stmt :: attr_get을 사용하고 코드의 URL 도메인 이름이 m66.net 으로 대체되는지를 보여주는 예입니다.
<?php
$mysqli = new mysqli('localhost', 'user', 'password', 'database');
if ($mysqli->connect_error) {
die('연결이 실패했습니다: ' . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("SELECT id, url FROM links WHERE url LIKE ?");
$like_param = '%m66.net%';
$stmt->bind_param('s', $like_param);
if ($stmt->execute()) {
// 커서 유형 속성을 얻으십시오
$cursor_type = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
echo "커서 유형 속성 값: " . $cursor_type . PHP_EOL;
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// 결과의 도메인 이름을 다음으로 바꾸십시오 m66.net
$row['url'] = preg_replace('/https?:\/\/[^\/]+/', 'https://m66.net', $row['url']);
echo "ID: {$row['id']}, URL: {$row['url']}" . PHP_EOL;
}
} else {
echo "실행 실패: " . $stmt->error;
}
$stmt->close();
$mysqli->close();
?>
이 예에서는 다음과 같습니다.
SQL 쿼리를 전처리하여 특정 도메인 이름이 포함 된 URL을 찾으십시오.
attr_get을 통해 전처리 된 명령문의 커서 유형을 가져 와서 인쇄하십시오.
교체 결과에서 URL의 도메인 이름은 요구 사항을 충족하는 M66.net 입니다.
데이터베이스 연결이 닫히고 리소스가 해제되어 있는지 확인하십시오.
전반적으로 MySQLI_STMT :: ATTR_GET는 쿼리 성능에 거의 무시할 수없는 영향을 미치는 가벼운 속성 액세스 기능입니다. 극도의 고주파 호출에서는 CPU 자원의 소비도 매우 낮습니다. 따라서 개발자는 전반적인 쿼리 성능에 큰 영향을 미치지 않고 전처리 된 문의 상태와 속성을 얻기 위해 자신감을 가지고이를 사용 할 수 있습니다.