Php 为Microsoft Access数据库设置PDO连接类

Php 为Microsoft Access数据库设置PDO连接类,php,sql,database,ms-access,pdo,Php,Sql,Database,Ms Access,Pdo,你好 基本上,我正在尝试使用带有PHP的MicrosoftAccess数据库设置一个PDO连接类,以便在创建新页面时调用该类 到目前为止,我已经尝试从其他有关堆栈溢出的文章中对其进行改编: 注意:我对使用Microsoft Access数据库设置PHP完全是新手,我知道我的$dbName可能放错了位置,老实说,我不确定它会放在哪里 class connection{ public $con = ''; function __construct(){ $thi

你好

基本上,我正在尝试使用带有PHP的MicrosoftAccess数据库设置一个PDO连接类,以便在创建新页面时调用该类

到目前为止,我已经尝试从其他有关堆栈溢出的文章中对其进行改编: 注意:我对使用Microsoft Access数据库设置PHP完全是新手,我知道我的$dbName可能放错了位置,老实说,我不确定它会放在哪里

class connection{

    public $con = '';

    function __construct(){

        $this->connect();   
        /*probably in the wrong place but... */ 
        $dbName = $_SERVER["DOCUMENT_ROOT"] . "\database/yakety1new.mdb";
    }

    function connect(){

        try{

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

            $this->con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

        } catch (PDOException $e){

            echo 'We\'re sorry but there was an error while trying to connect to the database';
            file_put_contents('connection.errors.txt', $e->getMessage().PHP_EOL,FILE_APPEND);
        }
    }   
}
因此,我试图找出$dbName变量的位置,以及如何在索引页中调用连接类和SQL语句

我有一个基本想法,大致如下:

include_once '/pages/classes/connectionClass.php';

$con = new connection();

$sql = $this->con->prepare("SELECT * FROM celebs");
$result = $con->query($sql);
while ($row = $result->fetch()) {
    $firstname = $row['firstname'];
    $surname = $row['surname'];

echo $firstname;
echo $surname;  
}
我运行脚本,只收到以下消息:
'很抱歉,尝试连接到数据库时出错'

谁能给我指出正确的方向,任何人的帮助都会非常棒! 提前谢谢

编辑:好的,现在我真的迷路了-我一直在看我的代码,不知道为什么会出现错误:致命错误:对D:……中的非对象调用成员函数fetch()。。。。。。。第23行。下面是代码:

try{

   include_once '\classes\connectionClass.php';


   //get the DB connection
   $con = new connection();
   $pdoConnection = $con->connect();

    //query the DB
   $sql = $pdoConnection->prepare("SELECT * FROM celebs");
   $result = $pdoConnection->query($sql);
   while ($row = $result->fetch()) {
      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);
    }
错误与此行有关: 而($row=$result->fetch()){


我哪里出错了?

连接

class connection{

    private $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;
    }   
}
以及代码

try{
    include_once '/pages/classes/connectionClass.php';

    //get the DB connection
    $con = new connection();
    $pdoConnection = $conn->connect();

    //query the DB
    $sql = $pdoConnection->prepare("SELECT * FROM celebs");
    $result = $pdoConnection->execute();
    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);
}

$dbname需要是实际使用它的函数的局部变量,或者需要定义为类的成员。目前,您将它作为一个甚至不使用它的函数的局部变量。并且您应该使用一种区分成员和局部变量的命名约定,可以在f类成员:

class connection
{
  public $m_con = '';
  private $m_dbName = '';
  function __construct()
  {
     ...
     $m_dbName = $_SERVER["DOCUMENT_ROOT"] . "\database/yakety1new.mdb";
  }
  function connect()
  {
    try 
    {
      $this->m_con = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$m_dbName; Uid=Admin; Pwd=;");


非常感谢您的回复,但是我从后面得到了一个代码提示错误:$this->m_-con=new-PDO(“odbc:DRIVER={Microsoft-Access-DRIVER(*.mdb)};DBQ=$m_-dbName;Uid=Admin;Pwd=;”;它不像这样:$this->m_-con->setAttribute(PDO::ATTR_-ERRMODE,PDO::ERRMODE异常);我已尝试实施您的建议,并收到错误消息…“很抱歉,尝试连接到数据库时出错”您好,感谢您的回复。我似乎无法使此功能正常工作:(我已经做了你建议的修改,我得到了一个内部服务器错误问:在你建议的最后一行代码($result=$pdoConnection…)之后,你认为我的其余代码还可以吗?Hi@TimJohnstone如果你有多条记录,那么你应该使用
fetchAll(PDO::FETCH_ASSOC)
。您收到的错误是什么?很幸运,mate,我仍然收到相同的错误消息。您将返回值放在哪里?也许这就是我出错的地方?您在帖子中显示的错误是您编写的错误,PDO错误呢?
$e->getMessage()
Tim如果您需要我,可以给我留言或发电子邮件给我cybermeda@gmail.comI不要认为您应该在连接数据库名称字符串中混合使用
/
和\事实上,您可能只需要输入数据库名称,而不是实际的文件路径,如图所示
 function connect()
 {
   try 
   {
     $dbName = $_SERVER["DOCUMENT_ROOT"] . "\database/yakety1new.mdb";
     $this->con = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$dbName; Uid=Admin; Pwd=;");