PDO :: exec()阻止进一步的查询工作

时间:2014-04-23 03:07:12

标签: php mysql sql database pdo

我尝试使用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(); 

2 个答案:

答案 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()错误是因为它提供的对象不是数组,因为它失败了。