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

警告:mysql_query():指定された引数は有効なMySQL-Linkリソースではありません

    コメントによると、問題の原因はrequire_once()を使用しているようです。 関数内。

    2つのうちの1つが起こっています。どちらか:

    1. すでにConnection.phpが含まれています 他の場所にあるので、関数に到達したとき、実際には含まれていません。1回のため require_onceの一部 。

      または...

    2. です 関数を最初に呼び出すときは機能しますが、2回目に呼び出すときは、ファイルはすでに含まれており、再び含まれることはありません。

    問題は、ファイルが最初に含まれるとき(それがこの関数内からのものであると仮定して)、$connection 変数は関数スコープで作成され、他の関数変数と同様に、関数の最後で削除されます。関数を2回呼び出すと、require_onceを使用しているため、インクルードは発生しません。 。

    require()を呼び出すことでこれを修正できる可能性があります require_once()の代わりに 、ただし、関数を呼び出すたびにデータベースに再接続することになります。これは、多くの不要なオーバーヘッドです。インクルードを関数の外に移動し、接続を関数に渡すか、グローバル変数として使用する方がはるかにクリーンです。

    これは次のようになります:

    require_once('Connection.php');
    
    function getResult() {
        global $connection;
    
        $findQuery = "SELECT * FROM `Keys` WHERE `ID` = '$gID'";
        $findResult = mysql_query($findQuery, $connection) or die(mysql_error());
        $resultRow = mysql_fetch_assoc($findResult) or die(mysql_error());
    } 
    

    そうは言っても、このコードには2つの大きな問題があります。

    1. mysql_*を使用しています 非推奨であり、PHPの新しいバージョンから間もなく削除される関数。詳細については、次の質問を参照してください:なぜすべきでないのかPHPでmysql_*関数を使用しませんか?

      mysqli_*のようなものに切り替えるのは実際にはそれほど難しいことではありません 代わりに関数-現在使用しているものとほぼ同じ非オブジェクトの関数セットがあります。

    2. 変数を適切にエスケープせずにクエリに含めています。少なくとも、mysql_real_escape_string()を呼び出す必要があります (またはmysqli_real_escape_string() )が、より良い解決策は、準備されたステートメントを調べることです。プリペアドステートメントの詳細については、次を参照してください: PHPでSQLインジェクションを防ぐにはどうすればよいですか?




    1. SQLServer2017でクエリを作成する

    2. SQLServerを使用したアクセスの概要をご覧ください

    3. JavaからLotusNotesに接続する

    4. Oracle:RAISE_APPLICATION_ERRORを使用する状況はどうなっていますか?