我正在将我的旧mysql数据库技术更新为准备好的pdo语句。我对while循环while($row = $result->fetch())很在行,但是我如何使用PDO prepared语句来做以下事情呢?
$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:
$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查询的末尾。
发布于 2015-07-06 20:33:48
要使用PDO正确计算行数,您必须这样做-
$result = $conn->prepare("SELECT * FROM table WHERE id= ?");
$result->execute(array($id));
$rows = $result->fetch(PDO::FETCH_NUM);
echo $rows[0];但是,如果您想要做的只是获得静态数量的结果,那么在查询中使用LIMIT会更好。
此外,您还使您的循环过于复杂,不需要在for条件中测试范围,只需设置静态数字,除非您正在做一些奇怪的事情,比如可能的分页。
发布于 2015-07-06 23:31:36
你可以这样尝试:
$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'];
}发布于 2015-07-07 19:36:37
根据OP的要求,下面是一个使用LIMIT和OFFSET进行分页的PDO准备语句示例。请注意,我更喜欢使用bindValue()而不是传递参数来执行(),但这是个人喜好。
$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);这将为您提供仅限于所需页面的完整行结果集。当然,您还需要另一个查询来计算总行数。
https://stackoverflow.com/questions/31245674
复制相似问题