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

Peringatan:mysql_query():argumen yang diberikan bukan sumber MySQL-Link yang valid

Berdasarkan komentar, sepertinya masalahnya disebabkan oleh penggunaan require_once() di dalam suatu fungsi.

Satu dari dua hal sedang terjadi. Atau:

  1. Anda telah menyertakan Connection.php di tempat lain, jadi ketika Anda masuk ke fungsi, itu sebenarnya tidak disertakan.. karena sekali bagian dari require_once .

    atau...

  2. Ini adalah berfungsi saat pertama kali Anda memanggil fungsi tersebut, tetapi saat Anda memanggilnya untuk kedua kalinya, file telah disertakan dan tidak disertakan lagi.

Masalahnya adalah ketika file pertama kali disertakan (dengan asumsi itu dari dalam fungsi ini), $connection variabel dibuat dalam lingkup fungsi, dan seperti variabel fungsi lainnya, hilang di akhir fungsi. Saat Anda memanggil fungsi untuk kedua kalinya, penyertaan tidak terjadi karena Anda menggunakan require_once .

Anda mungkin dapat memperbaikinya dengan memanggil require() bukannya require_once() , tetapi itu akan menghubungkan kembali ke database setiap kali Anda memanggil fungsi - yang merupakan banyak overhead yang tidak perlu. Jauh lebih bersih untuk hanya memindahkan penyertaan di luar fungsi, dan meneruskan koneksi ke dalam fungsi, atau menggunakannya sebagai variabel global.

Itu akan terlihat seperti ini:

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());
} 

Semua yang dikatakan, ada 2 masalah utama dengan kode ini.

  1. Anda menggunakan mysql_* fungsi yang tidak digunakan lagi dan akan segera dihapus dari versi baru PHP. Lihat pertanyaan ini untuk detail lebih lanjut:Mengapa harus 'bukankah saya menggunakan fungsi mysql_* di PHP?

    Sebenarnya tidak sulit untuk beralih ke sesuatu seperti mysqli_* sebagai gantinya - ada serangkaian fungsi non-objek yang hampir identik dengan yang Anda gunakan sekarang.

  2. Anda memasukkan variabel dalam kueri Anda tanpa menghindarinya dengan benar. Setidaknya Anda harus memanggil mysql_real_escape_string() (atau mysqli_real_escape_string() ), tetapi solusi yang lebih baik adalah dengan melihat ke dalam pernyataan yang sudah disiapkan. Anda dapat menemukan informasi lebih lanjut tentang pernyataan yang disiapkan di sini:Bagaimana saya bisa mencegah injeksi SQL di PHP?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya memerlukan bidang mysql?

  2. Masalah Pencocokan MySQL

  3. Mysql DISTINCT tidak berfungsi jika saya menambahkan kolom lain

  4. Bagaimana cara mendapatkan dari server MySql ke aplikasi Android?

  5. MySQL LIMIT pada pernyataan DELETE