Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Không thể lấy số hàng và tìm nạp khi sử dụng câu lệnh chuẩn bị MySQLi

Nếu bạn muốn sử dụng mysqli_stmt::$num_rows (nghĩa là kiểm tra số hàng trên câu lệnh đã chuẩn bị), bạn cần sử dụng $stmt->store_result() sau khi thực hiện câu lệnh đã chuẩn bị trước khi có thể kiểm tra số hàng. Điều đó có nghĩa là kết quả được lưu vào bộ nhớ trước khi chúng tôi kiểm tra xem có bao nhiêu hàng được trả về.

$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) {
    // ...

Tuy nhiên, nếu bạn muốn sử dụng mysqli_result::$num_rows (trên kết quả MySQLi mà bạn chuyển đổi từ kết quả câu lệnh), bạn cần thực hiện điều đó sau khi thực hiện $result = $stmt->get_result(); và sử dụng $result->num_rows; , như hình dưới đây.

$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()) {
    // ....

Cuối cùng, cả hai đều sẽ làm cùng một việc - cung cấp một số hàng được trả về bởi truy vấn đã chuẩn bị ban đầu.

Lưu ý
Điều quan trọng cần lưu ý là bạn không thể sử dụng store_result()get_result() trên cùng một tuyên bố. Có nghĩa là trong ví dụ đầu tiên, bạn không thể chuyển đổi thành đối tượng mysqli-result (bằng cách sử dụng get_result() , cho phép bạn sử dụng fetch_assoc() chuẩn phương pháp). Dưới dạng store_result() lưu kết quả vào bộ nhớ, không có gì cho get_result() để chuyển đổi và ngược lại.

Điều này có nghĩa là nếu bạn sử dụng store_result() , bạn cần tìm nạp thông qua lệnh tìm nạp, mysqli_stmt::fetch() và liên kết kết quả mặc dù mysqli_stmt::bind_result() . Nếu bạn sử dụng get_result() , bạn nên kiểm tra số hàng trên đối tượng MySQLi-result kết quả (như được hiển thị trong ví dụ thứ hai).

Bạn nên xây dựng mã của mình sao cho bạn chỉ cần sử dụng một trong số chúng.

Điều đó đang được nói, bằng cách sử dụng affected_rows như được đề xuất trong các nhận xét, không phải là công cụ phù hợp cho công việc - theo hướng dẫn sử dụng trên mysqli_stmt::$affected_rows (điều tương tự cũng áp dụng cho một truy vấn thông thường, 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. Học MySQL / MariaDB cho người mới bắt đầu - Phần 1

  2. Tính phần trăm số nhóm (*)

  3. PHP:nhiều truy vấn SQL trong một câu lệnh mysql_query

  4. Mô hình danh sách liền kề so với Mô hình tập hợp lồng nhau cho dữ liệu phân cấp MySQL?

  5. Sử dụng MariaDB với Entity Framework