Php 如何基于num_行使用PDO显示内容?
显然,num_rows属性在PDO中不像在mysqli中那样工作 通常,使用mysqli时,我的代码如下所示:Php 如何基于num_行使用PDO显示内容?,php,mysqli,pdo,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
<?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;
}
}
?>
是的,PDO不是很好;p当您已经获得行数时,不需要计算行数 当你有一个数组时循环你的结果 更改:
for ($i = 0; $i < $count; $i++){
echo $rows->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'];
}
当然,在每次数据库执行之后,您应该始终检查$conn->errorCode()
,以确保有东西在您身上横行
更新:
正如Lawrence指出的,rowCount()不适用于MS SQL Server。这种情况下的另一种选择是使用fetchAll()和count()。OP使用的是
$count=count($rows)代码>,问题是for循环。[Duplicate]在他的示例代码中,他正在检查行数以确保弹出正确的UX消息。因此,在这种情况下,SelectsInDect不保证需要.rowCount。根据我的经验,SQL Server不会返回正确的答案。答案已更新。
foreach ($rows as $row) {
echo $row->fname;
}
$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'];
}
while($row = $qry->fetch(PDO::FETCH_OBJ) {
echo $row->fname;
}