Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mendapatkan kesalahan akses ditolak saat menjalankan mysql_query di php

Pembaruan Terakhir:

Saya membuka sesi obrolan dengan Aditii dan kami melakukan beberapa debugging di sana.

Ternyata, masalahnya adalah dia telah meningkatkan dari server yang memiliki tag pendek yang diaktifkan ke yang tidak. Akibatnya, semua kodenya yang diapit tag pendek tidak dieksekusi, dan ini termasuk file konfigurasinya.

Kesalahan dalam pertanyaan disebabkan oleh mysql_connect() fungsi tidak dieksekusi karena seluruh file tidak dieksekusi. Sebuah mysql_query() panggilan yang mengandalkan koneksi itu gagal karena ini.

Setelah mengoreksi tag pendeknya untuk menggunakan <?php full lengkap tag, file itu dieksekusi. Seperti yang dibahas dalam jawaban asli saya untuk pertanyaan ini, tanda kutip tunggal di sekitar variabel yang diteruskan ke mysql_connect() akhirnya menimbulkan masalah. Setelah menyarankan agar tanda kutip tunggal tersebut dihapus, koneksi berhasil dan masalah teratasi.

Seluruh sesi debugging, untuk semua pihak yang berkepentingan, dapat ditemukan di sini .

Pembaruan Pertama:

Setelah melihat ini sedikit lebih dekat, ada dua bagian yang tidak sesuai dengan respons awal saya (yang saya simpan di bagian bawah jawaban ini, karena masih ada beberapa info bagus di dalamnya).

Pertama, kesalahan dipicu oleh mysql_query() bukan mysql_connect() . Ini mungkin karena tidak ada penanganan kesalahan di sekitar koneksi, sehingga kesalahan tidak diketahui sampai nanti. Coba tambahkan beberapa penanganan kesalahan di sekitar sambungan:

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

if (!mysql_select_db('$dbname',$con)) {
  echo mysql_error();
}

Di atas, kesalahan akan ditampilkan segera setelah kesalahan terjadi.

Hal kedua yang saya lihat adalah Anda terhubung ke localhost dengan ODBC pengguna. Ini tidak masuk akal jika kesalahan dipicu oleh kode koneksi yang Anda tunjukkan di atas. Entah Anda akan masuk dengan pengguna bernama $username jika masalah Anda adalah masalah kutipan tunggal yang saya jelaskan di bawah, atau root jika tidak.

Sepertinya PHP sedang mencoba untuk terhubung dengan kredensial default untuk pengaturan PHP Anda (ditemukan di php.ini Anda file), daripada kredensial yang Anda berikan. Ini membuat saya percaya bahwa kalimat yang Anda tunjukkan kepada kami sebenarnya bukanlah kalimat yang dieksekusi. Apakah Anda yakin tidak mencoba menyambung ke tempat lain dalam kode Anda? Jika ya, saya menduga kesalahan Anda terletak pada bagian kode tersebut.

Mungkin juga (saya harus memeriksa) bahwa ketika Anda mencoba menjalankan mysql_query() terhadap koneksi nol, mungkin PHP sedang mencoba membuat koneksi untuk Anda. Saya tidak akan mengandalkan itu.

Saya sarankan Anda mencoba menjalankan kode terbaru yang saya berikan di atas, yang menggunakan mysql_error() berfungsi untuk menunjukkan kesalahan saat terjadi. Anda bahkan dapat menambahkan beberapa echo pernyataan Anda sendiri di blok tersebut, untuk beberapa debugging printf kuno yang bagus.

Jawaban Asli:

Masalahnya adalah Anda membungkus variabel Anda di dalam tanda kutip tunggal. Jika Anda membungkusnya dalam tanda kutip tunggal, PHP tidak mengevaluasi variabel ke nilainya. Misalnya, daripada meneruskan root sebagai argumen kedua, Anda melewatkan $username . Pada akhirnya, Anda mencoba masuk ke server bernama $localhost dengan pengguna bernama $username dengan sandi $password .

Lihat halaman dokumentasi PHP untuk String . Ini menjelaskan ini:

Jika Anda ingin menggunakan variabel di dalam string, Anda perlu menggunakan double kutipan, tidak tunggal. Namun, dalam kasus ini, Anda bahkan tidak perlu membungkus variabel ini dalam tanda kutip sama sekali, karena nilainya sudah string. Anda bisa meneruskan variabel dengan sendirinya. Coba ini:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat memilih pengelompokan baris berdasarkan create_at

  2. Kode PHP untuk memasukkan nilai kotak centang ke kolom tertentu di mysql dengan formulir pilih

  3. Pengalihan - alternatif untuk <meta http-equiv='refresh' />?

  4. LocalDateTime , ZonedDateTime dan Timestamp

  5. Sesi MySQL Workbench tidak melihat pembaruan ke database