"비객체의 속성을 얻으려고 시도 중" - 문제 이해
"비객체의 속성을 얻으려고 시도 중" 오류 일반적으로 존재하지 않는 개체의 속성에 액세스하려고 할 때 발생합니다. 귀하의 경우 이 문제는 아래 코드에서 발생합니다.
<?php include 'pages/db.php'; $results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con); $sidemenus = mysql_fetch_object($results); ?>
이 코드를 실행할 때 문제는 mysql_fetch_object() 사용에 있습니다. 이 함수는 사이드 메뉴 테이블의 단일 행에 대한 객체 표현을 반환하지만 보기 페이지에서 객체 배열로 이를 반복하려고 합니다.
<?php foreach ($sidemenus as $sidemenu): ?> <?php echo $sidemenu->mname."<br />"; ?> <?php endforeach; ?>
문제 해결
이 오류를 해결하려면 테이블에서 필요한 모든 행을 검색하여 배열에 저장해야 합니다. 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; }
보기 페이지에서 이 개체 배열을 사용하면 이를 반복하고 액세스할 수 있습니다. 각 개체의 속성:
<?php foreach ($sidemenus as $sidemenu): ?> <?php echo $sidemenu->mname."<br />"; ?> <?php endforeach; ?>
대체 접근 방식 PDO
이 상황을 처리하기 위한 또 다른 옵션은 보다 현대적이고 객체 지향적인 데이터베이스 상호 작용을 제공하는 PHP의 PDO 확장을 사용하는 것입니다. PDO를 사용하면 사이드 메뉴 테이블에서 모든 행을 가져와 다음과 같이 배열에 저장할 수 있습니다.
$pdo = new PDO('mysql:host=localhost;dbname=your_database', 'username', 'password'); $stmt = $pdo->prepare("SELECT * FROM sidemenu WHERE `menu_id`=:menu_id ORDER BY `id` ASC LIMIT 1"); $stmt->execute([':menu_id' => $menu]); $sidemenus = $stmt->fetchAll(PDO::FETCH_OBJ);
이 코드에서:
그런 다음 앞서 설명한 방법과 유사하게 보기 페이지에서 이 개체 배열을 사용할 수 있습니다.
위 내용은 PHP에서 '객체가 아닌 속성을 가져오려는 중' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!