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> 拡張機能または