【发布时间】:2013-04-17 22:37:56
【问题描述】:
当我回显 $rows_affected 变量时,有人可以解释一下,为什么根据我的数据库记录我应该得到 2 时我只得到 1?半个多小时试图弄清楚这一点,但仍然无法解决它.. 仍然是 PDO 上的菜鸟。
欢迎任何其他建议。
$sql1 = "SELECT title FROM page WHERE id=?";
$stm = $db->prepare($sql1);
$stm->execute(array($id));
$row1 = $stm->fetch(PDO::FETCH_ASSOC);
$sql2 = "SELECT id,title,pg_title FROM page WHERE title=? ORDER BY id ASC";
$stm = $db->prepare($sql2);
$stm->execute(array($row1['title']));
$rows_affected = $stm->fetchColumn();
if (count($rows_affected) > 0) {
for($i=0; $i <= $rows_affected; $i++) {
$row2 = $stm->fetch(PDO::FETCH_ASSOC);
if($row2['id']==$id){
echo '<a href="javascript: void(0)"><b>'.$row2['pg_title'].'</b></a> ';
}else{
echo '<a href="page.php?id='.$row2['id'].'';?><?php if(isset($_GET['edit']) && $_GET['edit']==1){ echo '&edit=1';}?><?php echo'">'.$row2['pg_title'].'</a> ';
}
}
}
【问题讨论】:
-
fetchColumn()会从第二个查询的第一个结果中得到id列的值,它与找到的记录数无关。你的意思是rowCount()?请注意,rowCount()方法仅适用于 MySQL。另请注意,$rows_affected将是一个标量值,因此count()与它结合使用毫无意义。 -
谢谢,一开始就奏效了!愚蠢的错误..当您说 rowCount() 仅适用于 mysql 时,您的意思是它仅在我在 mysql 中编码时才有效? P.s:我的英语不是很好对不起
-
@miguelfsf 听起来不错 :)
-
@miguelfsf 是的,
rowCount()对于所有数据库驱动程序的SELECT语句不能保证按预期工作。据我所知,MySQL 是唯一一个本机支持的驱动程序,它 保证可以工作。有关更多(尽管不多)信息,请参阅链接的手册页。还有stackoverflow.com/a/15888467/889949
标签: php pdo count row prepared-statement