如何基于num_rows显示PDO内容?

时间:2018-03-25 01:54:30

标签: php mysqli pdo

显然,num_rows属性在PDO中不像mysqli一样。

通常,使用mysqli,我的代码看起来像这样:

    <?php 
$conn = new mysqli('127.0.0.1','root','mypassword','mydbname');
if($conn->connect_errno){
die("Sorry, could not connect.");
}
$id = 1;

$qry = "SELECT * FROM customers WHERE id = ?";
$getCustomers = $conn->prepare($qry);
$getCustomers->bind_param("i",$id);
$getCustomers->execute();
$result = $getCustomers->get_result();
$count = $result->num_rows;

if($count == 0){
echo "Sorry, there are no results";
}else{
while($row = $result->fetch_object()){
echo $row->id;
echo $row->fname;
echo $row->lname;
echo $row->entry_date;
}
}

?>

如何使用PDO创建等效项?这是我到目前为止所尝试的:

<?php 
try{
$conn = new PDO('mysql:host=127.0.0.1;dbname=mydbname','root','mypassword');
}catch(PDOException $e){
echo $e;
}
$id = 1;


$qry = $conn->prepare("SELECT * FROM customers WHERE id = :id");
$qry->execute([':id'=>$id]);
$rows = $qry->fetchAll(PDO::FETCH_OBJ);
$count = count($rows);

if($count == 0){
echo "Sorry, there are no results for your criteria";
}else{
for($i = 0; $i < $count; $i++){
echo $rows->fname;
}
}
?>

3 个答案:

答案 0 :(得分:2)

是的,PDO不是很好;当你已经拥有它们时,不需要计算行数。

在您拥有数组时循环结果。

变化:

for ($i = 0; $i < $count; $i++){
    echo $rows->fname;
}

要:

for ($i = 0; $i < $count; $i++){
    echo $rows[$i]->fname;
}

或者更好地使用foreach。

foreach ($rows as $row) {
  echo $row->fname;
}

答案 1 :(得分:0)

声明     fetchAll(PDO::FETCH_OBJ)返回一个包含所有结果集行的数组described here。要获得数组的大小,请使用sizeof($count)。这应该给你数组的大小。

答案 2 :(得分:0)

专门回答你的问题。您可以使用rowCount()来检索结果中的行数:

$qry = $conn->prepare("SELECT * FROM customers WHERE id = :id");
$qry->execute([':id'=>$id]);
$count = $qry->rowCount();
$rows = $qry->fetchAll(PDO::FETCH_ASSOC);  //my personal preference

for($i=0; $i < $count; $i++) {
    echo $rows[$i]['fname'];
}

更密切地复制你的mysqli代码:

while($row = $qry->fetch(PDO::FETCH_OBJ) {
    echo $row->fname;
}

当然,您应该始终在每次执行数据库后检查$conn->errorCode(),以确保在您身边横向出现。

更新: 正如Lawrence指出的那样,rowCount()不适用于MS SQL Server。在这种情况下,另一种方法是使用fetchAll()和count()。