PHP PDO - 循环增量,用于获取每个循环的下一个数组行

时间:2015-07-06 12:19:28

标签: php pdo

我正在更新旧的mysql数据库技术以准备pdo语句。我对while循环Session一切都很好但是如何使用PDO预处理语句执行以下操作?

while($row = $result->fetch())

我已经尝试了这一点,但没有任何喜悦:

$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'];
}

谢谢!

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

4 个答案:

答案 0 :(得分:3)

要使用PDO正确计算行数,您必须执行此操作 -

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

但如果你想做的只是得到静态的结果数,你最好在你的查询中使用LIMIT

此外,你的循环过于复杂,没有必要在for条件下测试范围,只需设置静态数字,除非你做了一些奇怪的事情,就像可能的分页一样。

答案 1 :(得分:0)

你可以这样试试:

if callable(...)

答案 2 :(得分:0)

根据OP的要求,这里是使用LIMIT和OFFSET进行分页的PDO预处理语句的示例。请注意我更喜欢使用bindValue()而不是将参数传递给execute(),但这是个人偏好。

$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);

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

答案 3 :(得分:-1)

你可以尝试的是:

    //Get your page number for example 2
    $pagenum = 2;

    //Calculate the offset
    $offset = 7 * $pagenum; 

    //Create array     
    $data = array();

    $result = $conn->prepare("SELECT * FROM table WHERE id= ? LIMIT 7 OFFSET ?");
    $result->bind_param("ii", $id,$offset);
    $result->execute();

    $resultSet = $result->get_result();
    while ($item = $resultSet->fetch_assoc())
    {
        $data[] = $item;
    }

    $result->close();

    //echo resultSet you want
    var_dump($data);