Than ôi, nó hoàn toàn sai. Kết quả của truy vấn không liên quan gì đến số lượng hàng được tìm thấy. Một kết quả trống vẫn là một kết quả hợp lệ, nó không thể là false
chỉ vì truy vấn không tìm thấy gì
Trên thực tế, mã để kiểm tra xem một số giá trị có tồn tại trong cơ sở dữ liệu hay không sẽ chỉ là một quy trình thông thường cho các truy vấn được chọn
Và tất nhiên, một tuyên bố chuẩn bị là bắt buộc. KHÔNG bao giờ đặt một biến dữ liệu trực tiếp vào truy vấn. Thay vào đó, hãy luôn sử dụng trình giữ chỗ
Làm cách nào để kiểm tra xem một giá trị có tồn tại không?
Để kiểm tra xem một giá trị cụ thể có tồn tại trong cơ sở dữ liệu hay không, bạn chỉ cần chạy một truy vấn CHỌN thông thường, tìm nạp một hàng và xem có thứ gì đã được tìm nạp hay không
Cho trước $pdo
chứa một phiên bản PDO hợp lệ, mã sẽ là
$email = "test@example.com";
$stmt = $pdo->prepare["SELECT * FROM users WHERE email=?"];
$stmt->execute[[$email]];
$user = $stmt->fetch[];
if [$user] {
// email found
} else {
// or not
}
Ở đây chúng tôi đang chọn một hàng phù hợp với tiêu chí của chúng tôi, sau đó tìm nạp nó và sau đó kiểm tra xem có thứ gì đã được chọn hay chưa
ghi chú
Cũng hợp lý khi chỉ chọn một giá trị hằng số duy nhất để giảm một chút chi phí, nếu chúng ta sẽ không sử dụng bất kỳ dữ liệu đã chọn nào. Vì mục đích đó, đơn giản thay thế *
bằng 1
. Có một hàm hoặc một phương thức của lớp cho mục đích này cũng sẽ hữu ích
function emailExists[$pdo, $email] {
$stmt = $pdo->prepare["SELECT 1 FROM users WHERE email=?"];
$stmt->execute[[$email]];
return $stmt->fetchColumn[];
]
if [emailExists[$pdo, $email]] {
// found
}
ở đây chúng tôi đang sử dụng một phương thức tiện dụng của PDO là fetchColumn
trả về một giá trị đã chọn hoặc nếu không thì là false
. Cho trước 1 sẽ được coi là
$email = "test@example.com";
$stmt = $pdo->prepare["SELECT * FROM users WHERE email=?"];
$stmt->execute[[$email]];
$user = $stmt->fetch[];
if [$user] {
// email found
} else {
// or not
}
0 bởi câu lệnh $email = "test@example.com";
$stmt = $pdo->prepare["SELECT * FROM users WHERE email=?"];
$stmt->execute[[$email]];
$user = $stmt->fetch[];
if [$user] {
// email found
} else {
// or not
}
1, chúng ta có thể trả về trực tiếp kết quả của phương thức này. Tuy nhiên, trong trường hợp bạn thích nhập nghiêm ngặt, giá trị trả về có thể được chuyển thành boolean return [bool]$stmt->fetchColumn[];
Ngoài ra, như có thể thấy ở trên, một giải pháp phổ biến với số lượng hàng được trả về là không cần thiết. Gọi $stmt->numRows[] chỉ là thừa, chưa kể nó có thể không khả dụng do một số trình điều khiển hoặc cài đặt
❮ Tham chiếu PHP MySQLi
Ví dụ - Kiểu hướng đối tượng
Thực hiện truy vấn đối với cơ sở dữ liệu
$mysqli = new mysqli["localhost","my_user","my_password","my_db"];
// Kiểm tra kết nối
if [$mysqli -> connect_errno] {
echo "Không thể kết nối với MySQL. ". $mysqli -> connect_error;
thoát[];
}
// Thực hiện truy vấn
if [$result = $mysqli -> query["SELECT * FROM Persons"]] {
echo "Returned . ". $result -> num_rows;
// Bộ kết quả miễn phí
$result -> free_result[];
}
$mysqli -> close[];
?>
Nhìn vào ví dụ về phong cách thủ tục ở phía dưới
Định nghĩa và cách sử dụng
Hàm query[] / mysqli_query[] thực hiện truy vấn đối với cơ sở dữ liệu
cú pháp
Phong cách hướng đối tượng
$mysqli -> truy vấn [truy vấn, chế độ kết quả]
phong cách thủ tục
mysqli_query[kết nối, truy vấn, chế độ kết quả]
Giá trị tham số
Tham sốMô tảkết nốiBắt buộc. Chỉ định kết nối MySQL với usequeryRequired. Chỉ định chuỗi kết quả truy vấn SQLKhông bắt buộc. Một hằng số. Có thể là một trong những điều sau đây
- MYSQLI_USE_RESULT [Sử dụng cái này để truy xuất lượng lớn dữ liệu]
- MYSQLI_STORE_RESULT [Đây là mặc định]
chi tiết kỹ thuật
Giá trị trả về. Đối với các truy vấn CHỌN, HIỂN THỊ, MÔ TẢ hoặc GIẢI THÍCH thành công, nó sẽ trả về một đối tượng mysqli_result. Đối với các truy vấn thành công khác, nó sẽ trả về TRUE. FALSE trên failPhiên bản PHP. Nhật ký thay đổi 5+PHP. PHP5. 3. 0 đã thêm khả năng truy vấn không đồng bộVí dụ - Kiểu thủ tục
Thực hiện truy vấn đối với cơ sở dữ liệu
$con = mysqli_connect["localhost","my_user","my_password","my_db"];
if [mysqli_connect_errno[]] {
echo "Không thể kết nối với MySQL. ". mysqli_connect_error[];
thoát[];
}
// Thực hiện truy vấn
if [$result = mysqli_query[$con, "SELECT * FROM Persons"]] {
echo "Returned rows . ". mysqli_num_rows[$result];
// Tập kết quả miễn phí
mysqli_free_result[$result];
}
mysqli_close[$con];
?>
❮ Tham chiếu PHP MySQLi