sql >> データベース >  >> RDS >> Mysql

警告:mysql_query():3は有効なMySQL-Linkリソースではありません

    PHPは、リソースを特別な変数として使用して、ファイルやデータベース接続などの外部オブジェクトへのリンクを保持します。各リソースには整数IDが与えられます。 (ドキュメント

    接続の失敗

    データベース接続に失敗すると、Dan Breenが述べたように、「指定された変数は有効なMySQL-Linkリソースではありません」というエラーが発生する可能性があります。これは、リソースを保持するはずの変数がnullであるためです。

    $link = mysql_connect('localsoth','baduser','badpass'); // failed connection
    $result = mysql_query("SELECT 1", $link); // throws error
    

    エラーメッセージに特定のリソースIDが表示されているため、何らかの理由でデータベース接続が予期せず閉じられた可能性があります。プログラムにはまだリソースIDの変数がありますが、外部オブジェクトは存在しません。このかもしれません mysql_close()が原因である mysql_queryを呼び出す前にどこかで呼び出す 、または接続を閉じた外部データベースエラー。

    $link = mysql_connect();
    mysql_close($link);
    // $link may still contain a resource identifier, but the external object is gone
    mysql_query("SELECT 1", $link);
    

    接続の再利用

    mysql拡張機能とmysql_connect()の問題 デフォルトでは、連続する呼び出しで同じパラメータを渡すと、新しい接続を作成するのではなく、既存の接続を再利用します(ドキュメント )。これは、trueを渡すことで修正できます $new_linkへ パラメータ。
    これは、本番環境の2つの別々のデータベースからのデータが1つのテストサーバーに結合されたテストシステムと、mysql_xxx()のテストで発生しました。 関数呼び出しが互いに行き来し、システムを壊しました。

    $link1 = mysql_connect('localhost','user','pass'); // resource id 1 is given
    $link2 = mysql_connect('localhost','user','pass'); // resource id 1 is given again
    mysql_close($link2); // the connection at resource id 1 is closed
    mysql_query("SELECT 1", $link1); // will fail, since the connection was closed
    

    $new_linkを使用する :

    $link1 = mysql_connect('localhost','user','pass'); // resource id 1 is given
    $link2 = mysql_connect('localhost','user','pass', true); // resource id 2 is given
    mysql_close($link2); // the connection at resource id 2 is closed
    mysql_query("SELECT 1", $link1); // the connection at resource id 1 is still open
    

    編集:
    余談ですが、MySQLi<を使用することをお勧めします。 / a> 拡張機能または PDO 代わりに、可能であれば。 MySQL拡張機能はかなり古くなり、MySQLバージョン4.1.3以降の機能を利用できなくなりました。 http://www.php.net/manual/en/mysqliを見てください.overview.php 3つのインターフェースの違いの詳細については。



    1. SQLiteでテーブルの構造に関する情報を取得する4つの方法

    2. OracleはMySQLINSERTIGNOREと同等ですか?

    3. Access2016のデータセットビューでテーブルを作成する方法

    4. GroupBy句を含むSQLコンマ区切り行