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

PHPでmysql_queryを実行すると、アクセス拒否エラーが発生します

    最終更新:

    Aditiiとのチャットセッションを開始し、そこでデバッグを行いました。

    結局のところ、問題は、短いタグが有効になっているサーバーから有効になっていないサーバーにアップグレードしたことでした。その結果、短いタグで囲まれたすべてのコードが実行されておらず、これには彼女の構成ファイルが含まれていました。

    質問のエラーは、mysql_connect()が原因でした。 ファイル全体が実行されていなかったため、関数が実行されていません。 mysql_query() このため、その接続に依存していた呼び出しは失敗しました。

    短いタグを修正して、完全な<?phpを使用した後 タグ、そのファイルが実行されました。この質問に対する私の最初の回答で説明したように、mysql_connect()に渡される変数を一重引用符で囲みます 問題を引き起こすことになりました。これらの一重引用符を削除するようにアドバイスした後、接続は成功し、問題は解決しました。

    関係者向けのデバッグセッション全体は、こちら にあります。 。

    最初の更新:

    これをもう少し詳しく見てみると、元の応答に合わない部分が2つあります(まだいくつかの良い情報が含まれているため、この回答の最後に残しておきます)。

    まず、エラーはmysql_query()によってトリガーされています mysql_connect()ではありません 。これはおそらく、接続を取り巻くエラー処理がないため、エラーは後で確認されるまで通知されないためです。接続の周りにエラー処理を追加してみてください:

    if (!($con = mysql_connect('$localhost','$username','$password'))) {
      echo mysql_error();
    }
    
    if (!mysql_select_db('$dbname',$con)) {
      echo mysql_error();
    }
    

    上記では、エラーが発生するとすぐにエラーが表示されます。

    次に表示されるのは、localhostに接続していることです。 ODBCを使用 ユーザー。これは意味がありません 上記の接続コードによってエラーがトリガーされている場合。 $usernameというユーザーでログオンするか 問題が以下で説明する一重引用符の問題である場合、またはroot そうでない場合。

    PHPがPHPセットアップのデフォルトのクレデンシャル(php.iniにあります)で接続しようとしているようです ファイル)、提供した資格情報ではなく。これは、あなたが私たちに見せている行が実際に実行されている行ではないと私に信じさせます。コード内の他の場所に接続しようとしていないことを確認しますか?もしそうなら、あなたのエラーはコードのその部分にあると思います。

    mysql_query()を実行しようとしているときにも可能です(確認する必要があります)。 null接続に対して、PHPが接続を作成しようとしている可能性があります。私はそれを当てにしません。

    mysql_error()を使用する上記の更新されたコードを実行してみることをお勧めします。 エラーが発生したときにエラーを表示する関数。 echoを追加することもできます 古き良きprintfデバッグ用の、これらのブロック内の独自のステートメント。

    元の回答:

    問題は、変数を一重引用符で囲んでいることです。それらを一重引用符で囲むと、PHPは変数を値に評価しません。たとえば、rootを渡すのではなく 2番目の引数として、$usernameを渡します。 。最後に、$localhostというサーバーにログインしようとしています。 $usernameというユーザーと $passwordのパスワードを使用 。

    文字列のPHPドキュメントページ をご覧ください。 。これを説明します:

    文字列内で変数を使用する場合は、 doubleを使用する必要があります。 引用符、単一ではありません。ただし、この場合、値はすでに であるため、これらの変数を引用符で囲む必要はありません。 文字列。変数をすべて単独で渡すことができます。これを試してください:

    $con=mysql_connect($localhost, $username, $password);
    mysql_select_db($dbname, $con);
    


    1. TEXT列を返すパラメーター化されたクエリは、INT列に対して常にゼロを返します

    2. MySQLグループのmaxに対応する行全体を取得を選択します

    3. Windows認証ユーザーとしてOLEDBプロバイダーエラーのインスタンスを作成できません

    4. MySQL:単一のクエリを使用して複数のテーブルを削除する方法は?