首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP PDO -使用每个循环获取下一个数组行的增量for循环

PHP PDO -使用每个循环获取下一个数组行的增量for循环
EN

Stack Overflow用户
提问于 2015-07-06 20:19:28
回答 4查看 506关注 0票数 0

我正在将我的旧mysql数据库技术更新为准备好的pdo语句。我对while循环while($row = $result->fetch())很在行,但是我如何使用PDO prepared语句来做以下事情呢?

代码语言:javascript
复制
$sql = "SELECT * FROM table WHERE id=".$id;
$result = mysql_query($sql) or die(mysql_error());
$loop_count = mysql_num_rows($result);

for($row=0;$row<7 && $loop_count-->0;$row++)
{
    // Get next row
    $loop_row = mysql_fetch_array($result);

    echo $loop_row['field'];
}

我试过了,但没有用到joy:

代码语言:javascript
复制
$result = $conn->prepare("SELECT * FROM table WHERE id= ?");
$result->execute(array($id));
$loop_count = $result->rowCount();

for($row=0;$row<7 && $loop_count-->0;$row++)
{
    // Get next row
    $loop_row = $result->fetch();

    echo $loop_row['field'];
}

谢谢!

更新:使用for循环而不是while循环的原因是能够对结果进行分页,否则我只会将限制7放在SQL查询的末尾。

EN

回答 4

Stack Overflow用户

发布于 2015-07-06 20:33:48

要使用PDO正确计算行数,您必须这样做-

代码语言:javascript
复制
$result = $conn->prepare("SELECT * FROM table WHERE id= ?");
$result->execute(array($id));    
$rows = $result->fetch(PDO::FETCH_NUM);
echo $rows[0];

但是,如果您想要做的只是获得静态数量的结果,那么在查询中使用LIMIT会更好。

此外,您还使您的循环过于复杂,不需要在for条件中测试范围,只需设置静态数字,除非您正在做一些奇怪的事情,比如可能的分页。

票数 3
EN

Stack Overflow用户

发布于 2015-07-06 23:31:36

你可以这样尝试:

代码语言:javascript
复制
$result = $conn->prepare("SELECT * FROM table WHERE id= ?");
$result->execute(array($id));
$loop_rows = $result->fetchAll();
$loop_count = count($loop_rows);

for($row=0;$row<7 && $loop_count-->0;$row++)
{
    // Get next row
    echo $loop_rows[$row]['field'];
}
票数 0
EN

Stack Overflow用户

发布于 2015-07-07 19:36:37

根据OP的要求,下面是一个使用LIMIT和OFFSET进行分页的PDO准备语句示例。请注意,我更喜欢使用bindValue()而不是传递参数来执行(),但这是个人喜好。

代码语言:javascript
复制
$pagesize = 7; //put this into a configuration file
$pagenumber = 3; // NOTE: ZERO BASED. First page is nr. 0. 
                 //You get this from the $_REQUEST (aka: GET or POST)
$result = $conn->prepare("SELECT * 
                          FROM table 
                          WHERE id= :id 
                          LIMIT :pagesize 
                          OFFSET :offset");
$result->bindValue(':id', $id);
$result->bindValue(':pagesize', $pagesize);
$result->bindValue(':offset', $pagesize * $pagenumber);
$result->execute();    
$rows = $result->fetchAll(PDO::FETCH_ASSOC);

这将为您提供仅限于所需页面的完整行结果集。当然,您还需要另一个查询来计算总行数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31245674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档