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()
và 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
):
- PHP.net trên
mysqli_stmt::store_result()
- PHP.net trên
mysqli_stmt::get_result()
- PHP.net trên
mysqli_stmt::$num_rows