致命错误:使用Microsoft Access数据库上的PDO调用非对象上的成员函数fetchALL()

时间:2014-04-17 12:08:36

标签: php database pdo

下午好!

我已经建立了一个连接类到Microsoft Access数据库(可以工作)。但是,我的问题在于我正在尝试使用此类来执行简单的SQL语句,并且我收到错误消息:致命错误:在非对象上调用成员函数fetchALL()。

我是PDO的新手并且已经在线阅读了很多文章,但无济于事。我想我理解我的问题,但不完全,请有人可以了解情况,并可能提供一个答案,为什么我收到错误信息?

connectionClass.php

class connection{

      public $con;
      private $dbName;

      function __construct(){
          $this->dbName = $_SERVER["DOCUMENT_ROOT"] . "\database\yakety1new.mdb";
       }

      function connect(){
          $this->con = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$this->dbName; Uid=Admin; Pwd=;");
          $this->con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
          return $this->con;
         }   
      }

      if (!ini_get('display_errors')) {
      ini_set('display_errors', '1');
      }

testIndex.php

try{
   include_once '\classes\connectionClass.php';


   $con = new connection();
   $pdoConnection = $con->connect();


   $sql = $pdoConnection->prepare("SELECT * FROM celebs");
   $result = $pdoConnection->exec($sql);
     while ($row = $result->fetchALL(PDO::FETCH_ASSOC)) {
       echo $row['firstname'];
       echo $row['surname'];
      }
   } catch (Exception $e){
       echo 'ERROR:'.$e->getMessage();
       file_put_contents('connection.errors.txt', $e->getMessage().PHP_EOL,FILE_APPEND);
       }

       if (!ini_get('display_errors')) {
       ini_set('display_errors', '1');
      }

错误消息与此行相关:

while ($row = $result->fetchALL(PDO::FETCH_ASSOC)) {

非常感谢任何帮助,谢谢!

2 个答案:

答案 0 :(得分:1)

$result只是一个布尔值,表示查询是否成功。 fetchAll方法位于PDOStatement,因此应为:

while ($row = $sql->fetch(PDO::FETCH_ASSOC)) {

你也在执行错误的声明,它应该是:

$result = $sql->execute();

您使用的方法是在没有事先准备的情况下执行SQL字符串。你可以这样做:

$result = $pdoConnection->exec("SELECT * FROM celebs");
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {

答案 1 :(得分:1)

ini_set('display_errors', '1');
include_once '\classes\connectionClass.php';
$con = new connection();
$pdoConnection = $con->connect();

$data = $pdoConnection->query("SELECT * FROM celebs")->fetchAll();
foreach ($data as $row) {
   echo $row['firstname'];
   echo $row['surname'];
}

这是您需要的所有代码。