我正在更新旧的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查询的末尾。
答案 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);