我如何根据num_rows显示与PDO的内容



显然,num_rows属性在PDO中不起作用。

通常,使用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;
}
}
?>

是的,不是很好;

在您有一个数组时循环浏览结果。

更改:

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

to:

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

或更好地使用foreach。

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

语句 fetchAll(PDO::FETCH_OBJ)返回一个包含所有结果集行的数组,如下所述。要获得数组的大小,请使用sizeof($count)。那应该给您数组的大小。

专门回答您的问题。您可以使用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()

更新:正如劳伦斯指出的那样,RowCount((不适用于MS SQL Server。在这种情况下的一种替代方法是使用fetchall((和count((。

最新更新