Saya telah mencari di internet dan sejauh ini yang saya lihat adalah Anda dapat menggunakan mysql_
dan mysqli_
bersama - sama artinya:
<?php
$con=mysqli_connect("localhost", "root" ,"" ,"mysql");
if( mysqli_connect_errno( $con ) ) {
echo "failed to connect";
}else{
echo "connected";
}
mysql_close($con);
echo "Done";
?>
atau
<?php
$con=mysql_connect("localhost", "root" ,"" ,"mysql");
if( mysqli_connect_errno( $con ) ) {
echo "failed to connect";
}else{
echo "connected";
}
mysqli_close($con);
echo "Done";
?>
Apakah valid tetapi ketika saya menggunakan kode ini yang saya dapatkan adalah:
Connected
Warning: mysql_close() expects parameter 1 to be resource, object given in D:\************.php on line 9
Done
Untuk yang pertama dan sama kecuali dengan mysqli_close()
. Untuk yang kedua.
Apa masalahnya? Tidak bisakah saya menggunakan mysql_
dan mysqli
bersama - sama? Atau apakah itu normal? Apakah cara saya dapat memeriksa apakah koneksi benar-benar valid? (itu if(mysq...)
)
mysql_*
fungsi sama sekali. Mereka rawan kesalahan dan tidak aman, dan akan segera dihapus dari PHP (saat ini ditandai sebagai usang ). [Jawaban bagus ini] [0] menjelaskan lebih detail mengapa itu buruk. [0]: stackoverflow.com/a/12860046/1055295mysqli_*
fungsi dan kode bagus dengan fungsimysql_*
. Tetapi kategori terakhir ditandai sebagai usang karena ini adalah kumpulan fungsi yang lebih rendah, tidak dapat mendukung pemanggilan gaya-OO atau bahkan pernyataan yang disiapkan (untuk menyebutkan hanya dua contoh). Jika diberi pilihan dua alat untuk melakukan pekerjaan yang sama, salah satunya jelas lebih baik dalam jangka panjang dan lebih fleksibel, bukankah jawaban yang benar sudah jelas?Jawaban:
Tidak, Anda tidak dapat menggunakan
mysql
danmysqli
bersama - sama. Mereka adalah API terpisah dan sumber daya yang mereka buat tidak kompatibel satu sama lain.Namun
mysqli_close
, ada.sumber
Hanya untuk memberikan jawaban umum di sini tentang ketiga API MYSQL dengan referensi:
Anda tidak dapat mencampur salah satu dari tiga (
mysql_*
,mysqli_*
,PDO
) MYSQL API dari PHP bersama-sama, itu hanya tidak bekerja. Bahkan ada di FAQ manual :Anda perlu menggunakan MySQL API yang sama dan fungsi terkaitnya, mulai dari koneksi hingga kueri.
sumber
mysql_real_escape_string()
dengan kode lainnya yang merupakan PDO. Apakah ada sesuatu yang tidak saya dapatkan di sini pada waktu saya bekerja dengan API yang berbeda ini? Apakah saya yang bodoh di sini? Ini adalah untuk pertanyaan "sekarang dihapus" stackoverflow.com/q/34209127 hanya dapat dilihat oleh 10K + anggota jika ada yang bertanya-tanya. Ini terkait dengan$stmt3->execute(array('classID' => $_POST['class'],'studentID' => mysql_real_escape_string($substr)))
- Apakah saya melewatkan sesuatu di sini?mysql_real_escape_string()
secara diam - diam akan mencoba membuat koneksi dengan parameter default yang kemudian bekerja untuk OP. Jadi itu hanya membuat koneksi untuk mendapatkan set karakter. Jadi OP memiliki 2 koneksiini_get()
. Jadi mungkin hanya berfungsi untuk OP dengan pengaturan default. Saya hanya akan meninggalkannya dan mendapatkan kopi baru (☕☕☕).sqlsrv_query()
. Saya baru saja menutup pertanyaan di sini stackoverflow.com/q/41263771Secara teknis Anda dapat menggunakan koneksi terpisah sebanyak yang Anda inginkan, sementara masalah Anda disebabkan oleh kesalahan ketik - Anda hanya tidak dapat menggunakan sumber daya dari satu ekstensi dengan fungsi dari ekstensi lain, yang jelas sekali.
Namun, Anda harus menghindari beberapa koneksi dari skrip yang sama , tidak peduli dari API tunggal atau yang berbeda. Karena akan membebani server database Anda dan menghabiskan sumber dayanya. Jadi, meskipun secara teknis Anda bisa, Anda tidak boleh mencampur ekstensi yang berbeda dalam kode Anda, kecuali untuk periode refactoring yang singkat.
sumber
MySQLi
jauh lebih aman daripadaMySQL
yang sekarang sudah tidak digunakan lagi. Itulah mengapa Anda harus tetap menggunakanMySQLi
dan juga Anda tidak dapat mencampurnya karena keduanya berbeda.sumber