我尝试使用PHP实现分页。我发现调用exec到连接的数据库可以防止进一步的查询调用工作。 手头的代码:
<?php
// Pagination logic
//Here we count the number of results
$query = "SELECT COUNT(*) as num FROM gig";
$total_pages = $db->exec($query);
$total_pages = $total_pages[num];
?>
之后如果我尝试使用如下的查询:
<?php>
foreach ($db->query("SELECT sname, start, venue FROM gig WHERE start = '0000-00-00 00:00:00'") as $a) {
$row="<tr><td>$a[sname]</td><td>To be announced</td><td>$a[venue]</td></tr>\n";
print $row;
}
?>
它返回
警告:为foreach()提供的参数无效
删除第一个代码块后,查询工作正常。当我检查$ total_pages的值时,它是0,所以一路上肯定会出错。据我所知,我以与查询相同的方式使用它(它可以独立工作),所以它有什么理由不起作用吗?
PDO按以下方式初始化:
try {
$db = new PDO("mysql:dbname=$db_name;host=$db_server", $db_user, $db_pw);
} catch (PDOException $e) {
die('Connection failed: ' . $e->getMessage());
}
session_start();
答案 0 :(得分:0)
来自Manual
PDO :: exec()不返回SELECT语句的结果。为一个 SELECT语句,您只需要在程序中发出一次, 考虑发布PDO :: query()。对于您需要发布的声明 多次,用PDO :: prepare()和。准备一个PDOStatement对象 使用PDOStatement :: execute()发出语句。
答案 1 :(得分:0)
在使用查询来计算行而不是exec之后,使用了STATEMENT对象的函数:
$dbq = $db->query("SELECT * FROM gig");
$rows = $dbq->rowCount();
关于后一个代码块由于exec失败而无法工作 - 它似乎只是php查询的工作方式,如果一个失败,都会失败。 foreach()错误是因为它提供的对象不是数组,因为它失败了。