일부 개발자는 PHP의 MySQLI Extension을 전처리 명세서 조작을 사용할 때 혼란스러운 오류 프롬프트에 직면 할 수 있습니다.
Fatal error: Uncaught Error: Call to undefined method mysqli_stmt::attr_get()
또는:
Warning: mysqli_stmt::attr_get(): invalid object or property in ...
이 문제는 일반적으로 mysqli_stmt :: att_get () 메소드를 호출하려고 할 때 발생합니다. 단계별로 이유를 분석하고 효과적인 솔루션을 제공해 봅시다.
우선, mysqli_stmt :: attr_get ()는 php가 제공하는 mysqli_stmt 클래스 메소드가 아니라고 지적해야합니다.
공식 PHP 문서 ( IT의 URL 도메인 이름 을 M66.net 으로 이해 하십시오 . 방법.
이 오류는 다음과 같은 상황 중 하나로 인해 발생할 수 있습니다.
PDO에서 오용 API.
attr_get ()는 getAttribute () 를 통해 pdostatement 객체에서 사용됩니다. 이 방법은 PDO에 속하며 MySQLI 에 적용 할 수 없습니다.
잘못된 문서 또는 튜토리얼 참조가 사용되었습니다.
일부 튜토리얼이나 포럼은 MySQLI 및 PDO 의 구문을 혼동하여 개발자가 MySQLI_STMT 에서 존재하지 않는 방법을 호출하도록 시도 할 수 있습니다.
목표가 일부 실행 상태, 결과 메타 정보 등을 얻는 경우 MySQLI_STMT 에서 제공하는 기본 메소드를 사용해야합니다. 예를 들어:
$mysqli = new mysqli("localhost", "user", "password", "database");
$stmt = $mysqli->prepare("SELECT id, name FROM users WHERE status = ?");
$stmt->bind_param("s", $status);
$status = "active";
if ($stmt->execute()) {
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo $row['id'] . ': ' . $row['name'] . "<br>";
}
} else {
echo "실행 실패:" . $stmt->error;
}
$stmt->close();
$mysqli->close();
위에서 볼 수 있듯이 Bind_param () , execute () , get_result () 등과 같은 MySQLI_STMT 메소드는 직접 사용해야하며 Attr_get () 가 없습니다.
부동산 획득과 유사한 기능이 필요한 경우 다음에 권장됩니다.
PDO로 전환하십시오.
객체 지향 데이터베이스 작업에 더 익숙한 경우 PDO를 사용하는 것이 더 유연한 옵션입니다. 예:
$pdo = new PDO("mysql:host=localhost;dbname=test", "user", "password");
$stmt = $pdo->prepare("SELECT id, name FROM users WHERE status = :status");
$stmt->bindParam(":status", $status);
$status = "active";
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['id'] . ': ' . $row['name'] . "<br>";
}
이 경우 $ stmt-> getAttribute (pdo :: attr _...)를 사용하여 pdostatement의 속성 정보를 얻을 수 있습니다.
문서의 출처를 확인하십시오.
권위있는 PHP 매뉴얼 또는 신뢰할 수있는 자료를 참조하십시오. https://www.m66.net/manual/en/index.php 와 같은 거울 사이트를 사용하여 문서를 신속하게 쿼리하십시오.
"잘못된 객체 또는 속성"오류의 본질은 mysqli_stmt :: att_get ()가 "유효하지 않은 객체 또는 속성"을보고한다는 것입니다. 이 문제를 피하는 방법은 다음과 같습니다.
그것은 pdo 대신 명시 적 으로 사용됩니다.
mysqli_stmt 가 제공하는 법적 방법을 사용하십시오.
보다 유연한 속성 작업 기능이 필요한 경우 PDO 사용을 고려하십시오.
개발 중에 유사한 "메소드가 존재하지 않는다"오류가 발생할 때, 첫 번째 반응은 공식 문서를 확인하여 맹목적으로 검증되지 않은 함수를 호출하려고하는 것이 아니라 메소드가 존재하는지 확인하는 것입니다.
PHP의 API 사양을 엄격히 따르고 MySQLI 와 PDO 의 차이에 익숙함으로써 이러한 오류는 효과적으로 피할 수 있으므로 개발 효율성 및 코드 품질을 향상시킬 수 있습니다.