2012-07-03 29 views
15

Ngay bây giờ tôi có một file PHP mà không một truy vấn MYSQL và sau đó đếm hàng như thế này:Alternative cho mysql_num_rows sử dụng PDO

$count=mysql_num_rows($result); 


if ($count == 1) { 
    $message = array('status' => 'ok'); 
} else { 
    $message = array('status' => 'error'); 
} 

này hoạt động tốt nhưng tôi đang cố gắng để thay đổi tất cả các file PHP của tôi để sử dụng PDO. Vậy làm thế nào điều này có thể được thực hiện với PDO?

+0

http: // stackoverflow. com/questions/2700621/p hp-pdo-num-rows – dude

+0

Bạn không cần một chức năng như vậy cả. Xem [nhận số hàng với PDO] (https://phpdelusions.net/pdo#count) –

Trả lời

21
$res = $DB->query('SELECT COUNT(*) FROM table'); 
$num_rows = $res->fetchColumn(); 

hoặc

$res = $DB->prepare('SELECT COUNT(*) FROM table'); 
$res->execute(); 
$num_rows = $res->fetchColumn(); 

Bạn có thể se này để hỏi xem dữ liệu tồn tại hoặc được chọn, quá:

$res = $DB->query('SELECT COUNT(*) FROM table'); 
$data_exists = ($res->fetchColumn() > 0) ? true : false; 

Hoặc với các biến của bạn:

$res = $DB->query('SELECT COUNT(*) FROM table'); 
$message = ($res->fetchColumn() > 0) ? array('status' => 'ok') : array('status' => 'error'); 
+2

Tôi sai hoặc Bạn sẽ chỉ nhận được "cột đầu tiên của hàng tiếp theo" http://uk3.php.net/manual/ en/pdostatement.fetchcolumn.php – fearis

+0

Không có tham số trong fetchColumn, bạn sẽ nhận được cột đầu tiên của hàng đã chọn. Nhưng chúng tôi chỉ nhận được 1 kết quả và đó là số lượng. Hàng tiếp theo có nghĩa là, khi bạn không tìm nạp hàng hoặc cột, bạn sẽ bắt đầu với hàng kết quả đầu tiên. Sau khi bạn gọi hàm fetchColumn một lần nữa, bạn sẽ nhận được nội dung của hàng kế tiếp. – WolvDev

+0

Có, fetchcolumn() trả về colmn đầu tiên của hàng, thay vào đó, bạn cần sử dụng rowCount() – Asuquo12

3

Nếu bạn không sử dụng chuẩn bị phát biểu sau đó thử:

$find = $dbh->query('SELECT count(*) from table'); 
if ($find->fetchColumn() > 0){ 
    echo 'found'; 
} 

Tuy nhiên, nếu bạn chọn chuẩn bị phát biểu, mà tôi khuyên, sau đó:

$find = $dbh->prepare('SELECT count(*) from table'); 
$find->execute(); 
if ($find->fetchColumn() > 0){ 
    echo 'found'; 
} 
5

lẽ bạn có thể sử dụng "fetchAll" phương pháp PDO, mà trả về một mảng chứa tất cả các CHỌN các kết quả. Sau đó sử dụng phương pháp "đếm" để đếm các hàng của mảng.

Ex:

$rows = $stmt->fetchAll(); 
$num_rows = count($rows); 
+1

Điều này có thể tốn kém trên một tập dữ liệu lớn nếu tất cả những gì bạn cần biết là số lượng kết quả. –

+1

@QuinnComendant, hàm 'rowCount()' trả về một số đếm chính xác chỉ * sau * bạn vẫn lấy tất cả các hàng. –

+1

@BillKarwin, ý của bạn là 'mysql_num_rows()'? Phương thức 'rowCount()' của PDO trả về số hàng bị ảnh hưởng bởi câu lệnh DELETE, INSERT hoặc UPDATE cuối cùng "—không giống nhau. –

1

Có thể như thế ...

$numRows = $conn->query("SELECT COUNT(*) FROM yourtable")->fetchColumn(); 
echo $numRows; 
5
$stmt = $db->query('SELECT * FROM table'); 
$row_count = $stmt->rowCount(); 
echo $row_count.' rows selected'; 
-1
$jmldata  = $db->query("SELECT count(*) FROM blog_posts")->fetchColumn(); 
    $jmlhalaman = $p->jumlahHalaman($jmldata, $batas); 
    $linkHalaman = $p->navHalaman($_GET['halpost'], $jmlhalaman); 

    echo "<div class='center_title_bar'>Halaman : $linkHalaman </div> 
    </div></div></div> 
    "; 

nó hoạt động nhờ :)

-1
//query for counting the total number of rows 
$result = $conn->prepare("SELECT COUNT(*) FROM your_table"); 
    $result->execute(); 
    $num_rows = $result->fetchColumn(); 

    //condition to display the result 
    if ($num_rows>0) 
    { 
     echo "there is some results =".$num_rows; 
    }else{ 
     echo "no result"; 
    } 
+1

Bạn có hiểu mã của riêng mình không? – Benjamin

+0

Nó không rõ ràng !! – Younes27

Các vấn đề liên quan