2012-09-14 29 views
5

của PHP Làm cách nào để kiểm tra xem tập kết quả của tôi có trống hay không bằng cách sử dụng PDO trong PHP?Làm cách nào để kiểm tra kết quả truy vấn db được trả về bằng cách sử dụng PDO

$SQL = "SELECT ......... ORDER BY lightboxName ASC;"; 
$STH = $DBH->prepare($SQL); 
$STH->bindParam(':member_id', $member_id); 
$STH->execute(); 
$STH->setFetchMode(PDO::FETCH_ASSOC); 

while($row = $STH->fetch()) { 
    $lightbox_name = $row['lightboxName']; 
    $lightbox_id = $row['lightboxID']; 
    echo '<option value="'.$lightbox_id.'">'.$lightbox_name.'</option>'; 
} 

tôi đã sử dụng để làm điều đó như thế này:

$result = mysql_query("SELECT ...... ORDER BY lightboxName ASC;"); 
if(!$result) { echo 'No results found!'; } 

Nhưng vừa bắt đầu sử dụng PDO và chuẩn bị phát biểu và kiểm tra đối với $STH dường như không làm việc như mong đợi - nó luôn luôn có giá trị!

Trả lời

8

tôi sẽ cố gắng sử dụng rowCount():

$rows_found = $STH->rowCount(); 

Tuy nhiên, theo hướng dẫn:

Nếu câu lệnh SQL cuối cùng thực hiện bởi các PDOStatement liên quan là một câu lệnh SELECT, một số cơ sở dữ liệu có thể trả về số hàng được trả về bởi câu lệnh đó. Tuy nhiên, hành vi này không được bảo đảm cho tất cả các cơ sở dữ liệu và không nên dựa vào các ứng dụng di động .

Nếu nó không hoạt động cho bạn, bạn có thể sử dụng phương pháp khác được đề cập trong sách hướng dẫn.

Bạn có thể dĩ nhiên cũng thiết lập một biến trước while vòng lặp của bạn, thay đổi nó trong vòng lặp của bạn và kiểm tra giá trị sau khi vòng lặp ...

+0

Hoàn hảo. Hoạt động như dự định.Tôi đã chỉ đọc về điều này và một cách khác để làm điều đó là sử dụng columnCount(). Bạn có nghĩ rằng có một sự khác biệt hiệu suất giữa rowCount() và columnCount()? – ShadowStorm

+0

@ShadowStorm 'columnCount()' phải là siêu nhanh, nhưng sau đó lại, 'rowCount()' nếu nó có sẵn. Bạn sẽ phải kiểm tra điều đó để chắc chắn. – jeroen

+1

Tôi đã tìm thấy 'columnCount()' hoạt động tốt nhất vì nó sẽ trả về '0' trong tất cả các trường hợp thử nghiệm của tôi. 'rowCount()' thường trả về các hàng đã sửa đổi và loại bỏ logic của tôi. – Ben

1

Chỉ cần đổ thông tin về biến.

var_dump($STH) 

EDIT

Tôi chỉ có câu hỏi. Có chức năng rowCount() cho điều đó. Chỉ cần sử dụng $STH->rowCount(); cho số lượng hàng sau đó so sánh nó.

+2

Đó không phải là câu trả lời cho câu hỏi của tôi! Tôi không muốn đổ biến của mình. Tôi muốn kiểm tra nếu truy vấn cơ sở dữ liệu trả về kết quả! – ShadowStorm

+0

làm điều gì đó như trả về $ result, và sau đó print_r() –

+0

@ mk_89: Tôi không có biến $ result, tôi có biến $ STH và nó luôn chứa dữ liệu cho dù nó có kết quả hay không. – ShadowStorm

0

OK đây là mã nó không làm việc và cuối cùng sau vài giờ nhìn xung quanh và trộn kết hợp một số câu trả lời ở đây là một trong đó sẽ trong thực tế trả về một số trên tuyên bố chọn của bạn. SQL là câu lệnh chọn rõ ràng là $ username1 là bài đăng của hộp văn bản cho tên người dùng. $ password1 giống với thiết lập tên người dùng. Ngoài ra, bạn nên có mọi thứ bạn cần để làm cho nó hoạt động chỉ cần thay thế các biến của bạn thay cho vị trí của tôi. Tôi hy vọng điều này tiết kiệm một số người thời gian khi tôi tìm kiếm trong khi cố gắng để có được chính xác những gì tôi muốn ở đây. Giải pháp này là khi bạn có một câu lệnh chọn và bạn muốn có thể tiếp tục hoặc dừng lại dựa trên nó trả về một cái gì đó.

SQL = 'SELECT * from Users WHERE Username = :Username AND Password = :Password'; 
STH = $conn->prepare($SQL); 
STH->bindParam(':Username', $username1); 
STH->bindParam(':Password', $password1); 
STH->execute(); 
STH->setFetchMode(PDO::FETCH_ASSOC); 


row_count = $STH->rowCount(); 
Các vấn đề liên quan