Home >Database >Mysql Tutorial >Why am I getting a 'Trying to get property of non-object' error in PHP when accessing database results?

Why am I getting a 'Trying to get property of non-object' error in PHP when accessing database results?

Susan Sarandon
Susan SarandonOriginal
2024-12-03 17:28:10219browse

Why am I getting a

Addressing the Non-Object Property Access Error in PHP

The error message "Notice: Trying to get property of non-object" typically occurs when attempting to access properties of an object that has not been properly initialized or doesn't exist. In the provided code, this error arises due to an issue with the mysql_fetch_object() function.

The mysql_fetch_object() function retrieves a single row from a result set as an object. In your control page, you are correctly using this function to fetch a single sidemenu record:

  $results = mysql_query("SELECT * FROM sidemenu WHERE `menu_id`='".$menu."' ORDER BY `id` ASC LIMIT 1", $con);
  $sidemenus = mysql_fetch_object($results);

However, in your view page, you are trying to iterate over the $sidemenus variable as if it were an array of objects:

  foreach ($sidemenus as $sidemenu):
    echo $sidemenu->mname."<br />";
  endforeach;

This assumption is incorrect because mysql_fetch_object() returns an object, not an array of objects. To resolve this issue, you have two options:

1. Use a while Loop:

You can use a while loop to iterate over the result set and retrieve each sidemenu record as an object:

$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;

This approach creates an array of sidemenu objects, allowing you to iterate over them as needed.

2. Use PDO (Preferred):

PDO is a more modern and recommended database abstraction layer that provides improved security and flexibility. Using PDO, you can retrieve data as objects using the fetchAll(PDO::FETCH_OBJ) method. Here's how you would do it:

$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;

The above is the detailed content of Why am I getting a 'Trying to get property of non-object' error in PHP when accessing database results?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn