ホームページ > データベース > mysql チュートリアル > PHP で「非オブジェクトのプロパティを取得しようとしています」エラーが発生するのはなぜですか?

PHP で「非オブジェクトのプロパティを取得しようとしています」エラーが発生するのはなぜですか?

Susan Sarandon
リリース: 2024-12-05 00:02:11
オリジナル
663 人が閲覧しました

Why Am I Getting a

「非オブジェクトのプロパティを取得しようとしています」 - 問題の理解

エラー「非オブジェクトのプロパティを取得しようとしています」通常は、存在しないオブジェクトのプロパティにアクセスしようとしたときに発生します。あなたの場合、この問題は以下のコードで発生します:

<?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

この状況に対処するためのもう 1 つのオプションは、より最新のオブジェクト指向のデータベース インタラクションを提供する 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);
ログイン後にコピー

このコードでは:

  • PDO クラスは次のようにインスタンス化されます。データベースに接続します。
  • prepare() メソッドは SQL を準備するために使用されます。 query.
  • execute() メソッドは、指定されたパラメータを使用してクエリを実行します。
  • fetchAll(PDO::FETCH_OBJ) メソッドは、すべての結果をオブジェクトの配列としてフェッチします。

その後、前に説明した方法と同様に、ビュー ページでこのオブジェクトの配列を使用できます。

以上がPHP で「非オブジェクトのプロパティを取得しようとしています」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート