Home > Database > Mysql Tutorial > Why Am I Getting a 'Trying to get property of non-object' Error in PHP?

Why Am I Getting a 'Trying to get property of non-object' Error in PHP?

Susan Sarandon
Release: 2024-12-05 00:02:11
Original
617 people have browsed it

Why Am I Getting a

"Trying to get Property of Non-Object" - Understanding the Issue

The error "Trying to get property of non-object" typically occurs when you attempt to access a property of an object that does not exist. In your case, this issue arises in the code below:

<?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);
?>
Copy after login

When you execute this code, the issue lies in the use of mysql_fetch_object(). This function returns an object representation of a single row in the sidemenu table, but you are attempting to iterate over it as an array of objects in your view page:

<?php foreach ($sidemenus as $sidemenu): ?>
  <?php echo $sidemenu->mname."<br />"; ?>
<?php endforeach; ?>
Copy after login
Copy after login

Resolving the Problem

To fix this error, you need to retrieve all the rows you require from the table and store them in an array. You can achieve this by using a while loop to iterate over the results and populate an array with the relevant objects:

$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;
}
Copy after login

By using this array of objects in your view page, you can iterate over it and access the properties of each object:

<?php foreach ($sidemenus as $sidemenu): ?>
  <?php echo $sidemenu->mname."<br />"; ?>
<?php endforeach; ?>
Copy after login
Copy after login

Alternative Approach with PDO

Another option for handling this situation is to use PHP's PDO extension, which provides more modern and object-oriented database interaction. Using PDO, you can fetch all the rows from the sidemenu table and store them in an array as follows:

$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);
Copy after login

In this code:

  • The PDO class is instantiated to connect to the database.
  • The prepare() method is used to prepare the SQL query.
  • The execute() method executes the query with the provided parameters.
  • The fetchAll(PDO::FETCH_OBJ) method fetches all the results as an array of objects.

You can then use this array of objects in your view page, similar to the method described earlier.

The above is the detailed content of Why Am I Getting a 'Trying to get property of non-object' Error in PHP?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template