PHP에서 비객체 속성 액세스 오류 해결
일반적으로 "알림: 비객체의 속성을 가져오려고 시도 중" 오류 메시지 제대로 초기화되지 않았거나 존재하지 않는 개체의 속성에 액세스하려고 할 때 발생합니다. 제공된 코드에서는 mysql_fetch_object() 함수 문제로 인해 이 오류가 발생합니다.
mysql_fetch_object() 함수는 결과 집합에서 단일 행을 객체로 검색합니다. 제어 페이지에서는 이 함수를 올바르게 사용하여 단일 사이드 메뉴 레코드를 가져오고 있습니다.
$results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con); $sidemenus = mysql_fetch_object($results);
그러나 보기 페이지에서는 $sidemenus 변수를 마치 배열인 것처럼 반복하려고 합니다. 객체 수:
foreach ($sidemenus as $sidemenu): echo $sidemenu->mname."<br />"; endforeach;
mysql_fetch_object()가 객체 배열이 아닌 객체를 반환하기 때문에 이 가정은 올바르지 않습니다. 이 문제를 해결하려면 두 가지 옵션이 있습니다:
1. while 루프 사용:
while 루프를 사용하여 결과 집합을 반복하고 각 사이드 메뉴 레코드를 객체로 검색할 수 있습니다.
$results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con); $sidemenus = array(); while ($sidemenu = mysql_fetch_object($results)) { $sidemenus[] = $sidemenu; } foreach ($sidemenus as $sidemenu): echo $sidemenu->mname."<br />"; endforeach;
이 접근 방식은 다음의 배열을 생성합니다. 사이드 메뉴 개체를 사용하여 필요에 따라 반복할 수 있습니다.
2. PDO 사용(선호):
PDO는 향상된 보안과 유연성을 제공하는 보다 현대적이고 권장되는 데이터베이스 추상화 계층입니다. PDO를 사용하면 fetchAll(PDO::FETCH_OBJ) 메서드를 사용하여 데이터를 개체로 검색할 수 있습니다. 방법은 다음과 같습니다.
$stmt = $con->prepare("SELECT * FROM sidemenu WHERE `menu_id`=? ORDER BY `id` ASC LIMIT 1"); $stmt->execute(array($menu)); $sidemenus = $stmt->fetchAll(PDO::FETCH_OBJ); foreach ($sidemenus as $sidemenu): echo $sidemenu->mname."<br />"; endforeach;
위 내용은 데이터베이스 결과에 액세스할 때 PHP에서 '객체가 아닌 속성을 가져오는 중' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!