ホームページ > バックエンド開発 > PHPチュートリアル > mysqli::query() が「mysqli をフェッチできませんでした」データベース接続エラーで失敗するのはなぜですか?

mysqli::query() が「mysqli をフェッチできませんでした」データベース接続エラーで失敗するのはなぜですか?

Susan Sarandon
リリース: 2024-12-07 21:05:14
オリジナル
792 人が閲覧しました

Why is my mysqli::query() failing with a

Mysqli::query(): データベース接続エラー

「mysqli::query(): mysqli をフェッチできませんでした」エラー通常、データベース接続に問題があることを示します。次の手順では問題について説明し、提供されたコード スニペットに基づいた解決策を示します:

  1. Connection: 接続ファイルでは、new mysqli() の @ 記号は次の目的で使用されます。エラー報告を抑制します。これはエラーの表示を防ぐことを目的としていますが、エラーを無視するのではなく適切に処理することをお勧めします。
  2. Closing: クラス コンストラクターで、$DBConnect をクラス メンバー変数に割り当てます。これにより、接続オブジェクトがクラス全体で利用できるようになります。ただし、__destruct() メソッドでは、接続エラーがない場合は接続を閉じます。接続が利用できなくなったため、後続のクエリが失敗するため、これは問題です。
  3. 再オープン: __wakeup() メソッドは、シリアル化後に接続を再オープンすることを目的としています。ただし、クラスがインスタンス化されるときに呼び出されません。つまり、接続は閉じられたままになります。

解決策:

  1. @ 記号を削除します。接続オブジェクトのインスタンス化から。エラーをより堅牢な方法で処理します。
  2. 接続を閉じるコードを別のメソッドに移動し、接続を閉じる必要がある場合にのみ呼び出します。
  3. __wakeup() メソッドが呼び出されることを確認します。クラスがインスタンス化されるとき (例: オブジェクトからオブジェクトを取得するとき)セッション).

修正コード:

// Connection file
$DBConnect = new mysqli("localhost", "root@localhost", NULL, "Ladle");

// Check for connection error
if ($DBConnect->connect_errno) {
    $ErrorMsgs[] = "The database server is not available. Connect Error is " . $DBConnect->connect_errno . " " . $DBConnect->connect_error . ".";
}

// Class
class EventCalendar {
    private $DBConnect = NULL;

    function __construct() {
        include("inc_LadleDB.php");
        $this->DBConnect = $DBConnect;
    }

    function __destruct() {
        // Close the connection only if it's not closed already
        if (!$this->DBConnect->connect_error) {
            $this->DBConnect->close();
        }
    }

    function __wakeup() {
        // Include the database connection data
        include("inc_LadleDB.php");
        $this->DBConnect = $DBConnect;
    }
    
    // Event adding method
    // ...
}
ログイン後にコピー

以上がmysqli::query() が「mysqli をフェッチできませんでした」データベース接続エラーで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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