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

Bisakah saya secara membabi buta mengganti semua fungsi mysql_ dengan mysqli_?

Jawaban singkatnya adalah tidak , fungsinya tidak setara.

Kabar baiknya adalah ada alat konverter yang akan membantu Anda jika Anda memiliki banyak panggilan/proyek untuk diubah. Ini akan memungkinkan skrip Anda langsung bekerja.

https://github.com/philip/MySQLConverterTool

Ini adalah versi bercabang dari versi asli Oracle, dan halal.

Karena itu, tidak terlalu sulit untuk memperbarui kode Anda, dan Anda mungkin tetap ingin bermigrasi ke metodologi berorientasi objek ...

1) Sambungan

Untuk semua maksud dan tujuan, Anda memerlukan fungsi koneksi baru yang menyimpan koneksi sebagai variabel PHP, misalnya;

$mysqli = new mysqli($host, $username, $password, $database);

Perhatikan saya telah menyimpan koneksi ke $mysqli . Anda dapat menyimpan ke $db atau apa pun yang Anda suka, tetapi Anda harus menggunakan ini di seluruh kode Anda untuk merujuk koneksi.

Ingatlah untuk mengaktifkan pelaporan kesalahan untuk mysqli sebelum membuka koneksi;

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

2) Kueri

Catatan:Anda harus melindungi dari injeksi SQL dengan pernyataan yang telah disiapkan, yang tersedia di MySQLi. Lihat Bagaimana cara mencegah injeksi SQL di PHP? , tapi saya hanya akan membahas dasar-dasarnya di sini.

Anda sekarang harus menyertakan koneksi sebagai argumen dalam kueri Anda, dan mysqli_ . lainnya fungsi. Dalam kode prosedural itu argumen pertama, di OO Anda menulisnya seperti metode kelas.

Prosedural:

$result = mysqli_query($mysqli, $sql);

OO:

$result = $mysqli->query($sql);

3) Ambil Hasil

Pengambilan hasilnya mirip dengan mysql_ yang lama fungsi dalam prosedural;

while ($row = mysqli_fetch_assoc($result))

tetapi sebagai $result sekarang menjadi objek di mysqli, Anda dapat menggunakan panggilan fungsi objek;

while ($row = $result->fetch_assoc())

4) Tutup Sambungan

Jadi seperti sebelumnya, Anda perlu menyertakan koneksi dalam fungsi tutup; sebagai argumen dalam prosedural;

mysqli_close($mysqli);

dan sebagai objek tempat Anda menjalankan fungsi di OO;

$mysqli->close();

Saya akan berada di sini selamanya jika saya melewati semuanya, tetapi Anda mendapatkan idenya. Lihat dokumentasi untuk informasi lebih lanjut. Jangan lupa untuk mengonversi fungsi penutupan koneksi, rilis hasil, atau kesalahan dan penghitungan baris yang Anda miliki.

Aturan dasarnya adalah untuk fungsi yang menggunakan koneksi database, Anda harus memasukkannya ke dalam fungsi sekarang (baik sebagai argumen pertama dalam prosedural, atau objek yang Anda gunakan untuk memanggil fungsi di OO), atau untuk kumpulan hasil Anda bisa mengubah fungsinya menjadi mysqli_ atau gunakan hasil yang ditetapkan sebagai objek.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Memilih Kolom bukan di Grup By

  2. Perbedaan Antara Skema / Basis Data di MySQL

  3. Cara Memformat Angka di MySQL

  4. 1114 (HY000):Meja sudah penuh

  5. Peringatan:mysqli_query() mengharapkan parameter 1 menjadi mysqli, sumber daya diberikan