PHP의 MySQLI Extension을 사용하는 경우 MySQLI_STMT :: ATTR_GET 함수는 전처리 된 명령문 객체의 속성 값을 얻는 데 사용됩니다. 그러나 많은 개발자 들이이 기능을 호출 할 때 속성 값을 올바르게 얻을 수없는 문제를 겪게됩니다. 이 기사는이 현상의 가능한 원인을 깊이 분석하고 해당 솔루션을 제공합니다.
mysqli_stmt :: attr_get 메소드는 일반적으로 mysqli_stmt :: attr_set 에 의해 설정된 지정된 전처리 명령문 속성을 얻는 데 사용됩니다. 일반적인 속성은 다음과 같습니다.
mysqli_stmt_attr_update_max_length
mysqli_stmt_attr_cursor_type
mysqli_stmt_attr_prefetch_rows
간단한 예를 들어 봅시다 :
$mysqli = new mysqli('m66.net', 'user', 'password', 'database');
$stmt = $mysqli->prepare("SELECT * FROM users WHERE id = ?");
$stmt->attr_set(MYSQLI_STMT_ATTR_CURSOR_TYPE, MYSQLI_CURSOR_TYPE_READ_ONLY);
$cursorType = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
echo "Cursor Type: " . $cursorType;
모든 것이 잘 작동하면 $ Cursortype는 커서 유형 값 세트를 반환해야합니다.
속성이 올바르게 설정되지 않았습니다
attr_get은 attr_set 을 통해 설정된 속성 값 만 얻을 수 있습니다. 속성이 설정되지 않으면 Att_get은 False 또는 예상치 못한 값을 반환합니다.
일부 속성은 글쓰기 만 지원하지만 읽지 않습니다 <br> 일부 속성은 작성되며 Att_get은 값을 읽을 수 없으므로 유효하지 않은 반환이 발생합니다.
MySQLI 드라이버 버전 제한 또는 버그
PHP 및 MySQLI 드라이버의 다른 버전은 속성에 대한 지원이 정확히 동일하지 않으며 일부 버전의 attr_get 에는 구현 결함이있을 수 있습니다.
잘못된 속성 상수 또는 유형 <br> 호출 중에 전달 된 속성 상수가 유효한 MySQLI_STMT_ATTR_* 가 아닌 경우 읽지 않습니다.
속성이 설정되어 있는지 확인하십시오 <br> attr_get을 호출하기 전에 해당 속성이 attr_set 으로 올바르게 설정되었는지 확인하십시오. 예를 들어:
$stmt->attr_set(MYSQLI_STMT_ATTR_PREFETCH_ROWS, 10);
$value = $stmt->attr_get(MYSQLI_STMT_ATTR_PREFETCH_ROWS);
PHP 및 MySQLI 버전을 확인하십시오 <br> 사용중인 PHP 버전 및 MySQLI 확장이 최신 상태인지 또는 최소한 사용하려는 속성을 지원하는지 확인하십시오. PHP 버전 업그레이드는 일반적으로 호환성 문제를 해결합니다.
읽기 및 쓰기 전용 속성을 피하십시오 <br> 공식 문서를 확인하여 대상 속성이 읽기를 지원하고 읽기 및 쓰기 속성 만 피하십시오.
오류 처리 및 디버깅 정보를 사용하십시오 <br> attr_get을 호출 한 후 반환 값을 확인하고 mysqli_stmt_error를 사용하여 오류 메시지를 캡처하여 문제를 찾는 데 도움이됩니다.
$value = $stmt->attr_get(MYSQLI_STMT_ATTR_CURSOR_TYPE);
if ($value === false) {
echo "Failed to get attribute: " . $stmt->error;
}
대안을 사용하십시오 <br> 특정 속성의 상태를 확인 해야하는 경우 속성을 직접 읽는 대신 프로그램 로직 또는 데이터베이스 서버 매개 변수를 사용하는 것을 고려할 수 있습니다.
mysqli_stmt :: attr_get은 속성이 설정되었는지 여부, php/mysqli 버전 및 속성 자체의 읽기 및 쓰기 특성에 따라 사용이 제한됩니다. 속성 값을 얻을 수없는 경우 먼저 속성이 설정되었는지 확인하고 사용 된 버전이 속성을 읽는 것을 지원하십시오. 또한 합리적인 오류 처리 및 버전 업그레이드도 문제 해결 및 해결의 열쇠입니다.