준비된 진술은 데이터베이스 작업에 PHP의 MySQLI 확장을 사용할 때 강력한 도구입니다. SQL 주입을 효과적으로 방지 할뿐만 아니라 코드의 유지 관리 및 성능을 향상시킵니다. 이러한 전처리 문을 디버깅하고 최적화 할 때 MySQLI_STMT :: ATT_GET 함수는 문의 내부 상태를 이해하는 심층적 인 방법을 제공합니다. 이 기사는 사용법과 실제 응용 프로그램을 자세히 설명합니다.
mysqli_stmt :: attr_get은 명령문 핸들과 관련된 속성 값을 얻는 데 사용되는 mysqli_stmt 클래스의 메소드입니다. 이러한 속성 값은 일반적으로 버퍼링 또는 업데이트 카운트와 같은 문에 의해 수행되는 일부 기본 동작을 조정하거나 보는 데 사용됩니다. 이 방법은 복잡한 쿼리를 디버깅하거나 성능 병목 현상을 최적화 할 때 특히 유용합니다.
int mysqli_stmt::attr_get ( int $attr )
$ attr : mysqli_stmt_attr_update_max_length 등과 같이 쿼리 해야하는 속성 상수 등.
반환 값 : 성공하면 속성의 값을 반환하고 실패시 False를 반환합니다.
이 속성은 Store_Result ()가 필드의 최대 길이를 업데이트하는지 여부를 제어하는 데 사용됩니다. 이 속성을 활성화하면 각 열의 최대 데이터 길이를보다 정확하게 알 수 있습니다. 이는 특히 출력을 형식화하는 데 유용합니다.
$mysqli = new mysqli("localhost", "user", "password", "database");
$stmt = $mysqli->prepare("SELECT name FROM users");
$stmt->execute();
$stmt->store_result();
$maxLength = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
if ($maxLength) {
echo "속성이 활성화되었습니다:최대 열 길이가 업데이트되었습니다\n";
} else {
echo "속성이 활성화되지 않았습니다:최대 열 길이가 업데이트되지 않습니다\n";
}
이러한 방식으로 MySQLI_STMT :: Result_Metadata () 가 반환 한 열 길이 정보가 의존 할 수 있는지 판단 할 수 있습니다.
루프에서 bind_result () 및 fetch ()를 사용하여 성능이 저하되면 버퍼링 모드와 관련이있을 수 있습니다. attr_get은 버퍼링이 활성화되어 있는지 여부를 직접 얻을 수 없지만 Store_Result () 와이 속성의 반환 값을 사용하여 버퍼링 상태가 올바르게 관리되는지 여부를 결정하여 사용 _result ()가 메모리를 저장하도록 활성화되어 있는지 여부를 안내합니다.
$stmt = $mysqli->prepare("SELECT large_column FROM big_table");
$stmt->execute();
$stmt->store_result();
if ($stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH)) {
echo "업데이트 열의 최대 길이가 활성화됩니다,메모리 사용량을 증가시킬 수 있습니다。\n";
} else {
echo "업데이트 열 길이가 활성화되지 않았습니다,fetch 아마도 더 빠르지 만 부정확 한 길이입니다。\n";
}
update_max_length 활성화 필요한 경우에만 사용하십시오 . 각 열의 최대 길이 정보에 의존하는 대신 데이터를 통과하는 경우 불필요한 성능 오버 헤드를 줄이기 위해이 속성을 활성화 할 필요가 없습니다.
attr_set : attr_set을 사용하여 속성을 동적으로 조정하여 실행 전에 속성 값을 설정하고 실행 후 attr_get을 통해 구성이 적용되는지 확인하십시오.
$stmt->attr_set(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH, true);
...
$val = $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH);
실제 비즈니스 시나리오를 기반으로 버퍼링 모드를 선택하십시오 . 데이터 볼륨이 크고 메모리가 큰 시나리오의 경우 버퍼링 모드를 사용하는 것이 좋습니다 ( use_result () ). 현재 Att_get 에 의해 반환 된 최대 열 길이는 부정확하지만 성능은 더 높아집니다.
개발 환경에서는 더 쉬운 후속 분석을 위해 Att_get 의 결과를 로그 파일에 작성할 수 있습니다.
file_put_contents('/var/log/mysqli_debug.log', "UPDATE_MAX_LENGTH: " . $stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH) . "\n", FILE_APPEND);
이 방법은 특히 복잡한 시스템에서 느린 쿼리 디버깅 및 행동 분석에 적합하여 개발자가 문제의 원인을 신속하게 찾을 수 있도록 도와줍니다.
M66.net에서 사용자 목록 페이징 시스템을 개발하고 테이블의 필드 열 너비를 정렬해야한다고 가정합니다. 현재 attr_get 및 store_result를 사용하여 각 열의 최대 길이를 얻을 수 있습니다.
$stmt = $mysqli->prepare("SELECT username, email FROM users LIMIT ?, ?");
$stmt->bind_param("ii", $offset, $limit);
$stmt->execute();
$stmt->store_result();
if ($stmt->attr_get(MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH)) {
$meta = $stmt->result_metadata();
while ($field = $meta->fetch_field()) {
echo "전지 {$field->name} 최대 길이는입니다:{$field->max_length}\n";
}
}
이러한 방식으로, HTML 테이블의 열 너비를 동적으로 제어하여 사용자 인터페이스의 일관성을 향상시킬 수 있습니다.