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

Tidak bisa mendapatkan jumlah baris dan mengambil saat menggunakan pernyataan yang disiapkan MySQLi

Jika Anda ingin menggunakan mysqli_stmt::$num_rows (yaitu, periksa jumlah baris pada pernyataan yang disiapkan), Anda perlu menggunakan $stmt->store_result() setelah mengeksekusi pernyataan yang disiapkan sebelum dapat memeriksa jumlah baris. Itu berarti bahwa hasilnya disimpan ke dalam memori sebelum kami memeriksa berapa banyak baris yang dikembalikan.

$stmt = $conn->prepare($sql);
$stmt->bind_param('ss',$log_username,$log_username);
$stmt->execute();
$stmt->store_result(); // Need to store the result into memory first
if ($stmt->num_rows) {
    // ...

Namun, jika Anda ingin menggunakan mysqli_result::$num_rows (pada hasil MySQLi yang Anda konversi dari hasil pernyataan), Anda perlu melakukannya setelah melakukan $result = $stmt->get_result(); , dan gunakan $result->num_rows; , seperti yang ditunjukkan di bawah ini.

$stmt = $conn->prepare($sql);
$stmt->bind_param('ss',$log_username,$log_username);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows) {
    while ($row = $result->fetch_assoc()) {
    // ....

Pada akhirnya, keduanya harus melakukan hal yang sama - berikan sejumlah baris yang dikembalikan oleh kueri asli yang disiapkan.

Catatan
Penting untuk diperhatikan bahwa Anda tidak dapat menggunakan store_result() dan get_result() pada pernyataan yang sama. Artinya pada contoh pertama, Anda tidak dapat mengonversi ke objek mysqli-result (dengan menggunakan get_result() , yang memungkinkan Anda menggunakan fetch_assoc() standar metode). Sebagai store_result() menyimpan hasilnya ke dalam memori, tidak ada apa pun untuk get_result() untuk mengkonversi, dan sebaliknya.

Ini berarti jika Anda menggunakan store_result() , Anda perlu mengambil melalui pengambilan pernyataan, mysqli_stmt::fetch() dan ikat hasilnya mysqli_stmt::bind_result() . Jika Anda menggunakan get_result() , Anda harus memeriksa jumlah baris pada objek hasil MySQLi yang dihasilkan (seperti yang ditunjukkan pada contoh kedua).

Oleh karena itu, Anda harus membuat kode Anda sedemikian rupa sehingga Anda hanya perlu menggunakan salah satunya.

Karena itu, menggunakan affected_rows seperti yang disarankan di komentar, bukan alat yang tepat untuk pekerjaan itu - sesuai manual di mysqli_stmt::$affected_rows (hal yang sama berlaku untuk kueri biasa, mysqli::$affected_rows ):




  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 bisa memperbarui catatan tertentu tanpa izin SELECT?

  2. Mendapatkan koneksi PHP PDO dari mysql_connect()?

  3. Bagaimana pengaruh {} terhadap Query MySQL di PHP?

  4. Laravel fasih DimanaIn Semua

  5. Kembalikan hasil acak ( pesan berdasarkan Rand() )