Rumah > Soal Jawab > teks badan
mysqli_connect()
mengesyorkan menyemak nilai pulangan dan memaparkan mesej ralat pada skrin.
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db"); if (!$link) { echo "Error: Unable to connect to MySQL." . PHP_EOL; echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL; echo "Debugging error: " . mysqli_connect_error() . PHP_EOL; exit; }
Begitu juga, untuk pembina gaya OOP, ini disyorkan:
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); if ($mysqli->connect_error) { die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error); }
Sesetengah pengguna di Stack Overflow telah menggunakan kod dengan mysqli_error($conn)
seperti ini:
$conn = mysqli_connect('localhost', 'a', 'a'); if (!$con) { die('Could not connect: ' . mysqli_error($conn)); }
Tetapi, sejak beberapa minggu lalu, saya telah bertanya kepada diri sendiri, mengapa saya perlu melakukan ini? Output contoh pertama ialah:
Amaran: mysqli_connect(): (HY000/1045): Akses pengguna ditolak 'my_user'@'localhost' (gunakan kata laluan: YA) C:xampp...mysqli.php baris 4
Ralat: Tidak dapat menyambung ke MySQL. Nombor ralat penyahpepijatan: 1045 Penyahpepijatan Ralat: Akses ditolak untuk pengguna "my_user"@"localhost" (menggunakan kata laluan: Ya)
Seperti yang anda lihat, mesej ralat dipaparkan dua kali! "Penyahpepijatan" manual sebenarnya memberikan kurang maklumat.
Adakah kita perlu menyemak secara manual untuk ralat sambungan? Bolehkah kita mendapatkan lebih banyak maklumat daripada amaran automatik dengan cara ini? Adakah ini amalan yang disyorkan?
P粉2519031632023-10-28 00:52:28
MySQLi akan menjana amaran jika ia tidak dapat membuka sambungan ke MySQL. Amaran ini memberitahu anda semua yang anda perlu tahu, termasuk kod ralat, mesej ralat dan tempat dalam kod ralat itu berlaku. Menyemak ralat secara manual tidak akan memberi anda maklumat lanjut.
Jika anda tidak melihat amaran dan tidak dapat membuat sambungan, ini mungkin bermakna PHP anda tidak dikonfigurasikan untuk menunjukkannya. Dalam kes ini, anda mesti menyemak fail log ralat pada pelayan. Jika anda tidak tahu di mana ia, gunakan phpinfo() code>
获取该信息并搜索 error_log
. Ia akan memberitahu anda di mana fail log ralat berada.
Jika tiada amaran dalam log ralat, ini mungkin bermakna pelaporan ralat PHP anda telah disenyapkan (sepenuhnya atau hanya amaran). Semak konfigurasi PHP anda.
Dalam pengeluaranpersekitaran, tetapan ini harus dipelihara:
error_reporting
必须为 E_ALL
log_errors
必须开启
display_errors
必须关闭
Mesti Dalam pembangunan
persekitaran, tetapan ini harus dipelihara:error_reporting
必须为 E_ALL
log_errors
必须开启
display_errors
必须开启
Mesti
display_errors
Amaran dan pengecualian
die/exit
Amaran jangan hentikan skrip. Jika amaran dikeluarkan, skrip akan meneruskan pelaksanaan sehingga ralat maut ditemui. Dalam kebanyakan kes, anda perlu membuang pengecualian untuk menghentikan skrip. Jangan gunakan
Jika sambungan mysqli tidak dapat diwujudkan, pengecualian harus dibuang, yang jika tidak dikendalikan akan menggelembung dan menghentikan skrip dengan ralat yang membawa maut. Anda boleh mengkonfigurasi mysqli untuk membuang pengecualian secara automatik. Ini tidak ternilai kerana semua fungsi mysqli boleh gagal atas pelbagai sebab, dan mereka tidak akan memberitahu anda tentang sebarang masalah melainkan anda menyemak setiap satu daripadanya secara manual untuk ralat. Gunakan talian berikut sebelum membuka sambungan:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db');
Jangan tangkap pengecualian melainkan anda benar-benar tahu cara mengendalikannya! Kes penggunaan yang mungkin diterangkan dalam
mysqli_error()
Bolehkah sebarang isu berkaitan sambungan dipaparkan? mysqli_error($conn)
预计 mysqli 连接成功。 $conn
$conn->error
和 mysqli_error($conn)
Kedua-duanya tidak menunjukkan sebarang ralat berkaitan sambungan!
Berkaitan: Adakah saya perlu menyemak ralat secara manual semasa memanggil "mysqli_stmt_prepare"? p>