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

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

Dec 05, 2024 am 12:02 AM

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 までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

DockerでのMySQLメモリの使用を減らします DockerでのMySQLメモリの使用を減らします Mar 04, 2025 pm 03:52 PM

DockerでのMySQLメモリの使用を減らします

Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか? Mar 19, 2025 pm 03:51 PM

Alter Tableステートメントを使用してMySQLのテーブルをどのように変更しますか?

mysqlの問題を解決する方法共有ライブラリを開くことができません mysqlの問題を解決する方法共有ライブラリを開くことができません Mar 04, 2025 pm 04:01 PM

mysqlの問題を解決する方法共有ライブラリを開くことができません

sqliteとは何ですか?包括的な概要 sqliteとは何ですか?包括的な概要 Mar 04, 2025 pm 03:55 PM

sqliteとは何ですか?包括的な概要

Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし) Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし) Mar 04, 2025 pm 03:54 PM

Linuxでmysqlを実行します(phpmyAdminを使用してポッドマンコンテナを使用して/なし)

MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド Mar 04, 2025 pm 03:49 PM

MACOSで複数のMySQLバージョンを実行する:ステップバイステップガイド

共通の脆弱性(SQLインジェクション、ブルートフォース攻撃)に対してMySQLを保護するにはどうすればよいですか? 共通の脆弱性(SQLインジェクション、ブルートフォース攻撃)に対してMySQLを保護するにはどうすればよいですか? Mar 18, 2025 pm 12:00 PM

共通の脆弱性(SQLインジェクション、ブルートフォース攻撃)に対してMySQLを保護するにはどうすればよいですか?

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか? MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか? Mar 18, 2025 pm 12:01 PM

MySQL接続用のSSL/TLS暗号化を構成するにはどうすればよいですか?

See all articles