【问题标题】:How do I display content with PDO based on num_rows?如何使用基于 num_rows 的 PDO 显示内容?
【发布时间】:2018-03-25 01:54:29
【问题描述】:

显然,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;
}
}
?>

【问题讨论】:

标签: php mysqli pdo


【解决方案1】:

是的,PDO 不是很好;p 当你已经得到它们时,不需要计算它们。

当你有一个数组时循环你的结果。

变化:

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;
}

【讨论】:

  • 在他的示例代码中,他正在检查行数以确保他正在冒泡正确的用户体验消息。所以,在这种情况下,是有必要的。
【解决方案2】:

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

【讨论】:

  • OP 使用的是$count = count($rows);,问题是for循环。
【解决方案3】:

具体回答您的问题。您可以使用 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-&gt;errorCode(),以确保有什么事情发生在您身上。

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

【讨论】:

  • 不保证 SELECTS 的行数
  • 确实如此。根据我的经验,SQL Server 不会返回正确的答案。答案已更新。
猜你喜欢
  • 2016-09-20
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多