2012-08-11 87 views
-1

我想創建一個使用類的數據訪問。但會發生問題。我的文檔根的public_html所以我/資源文件是外面的文檔根目錄PHP - 創建數據庫訪問類

我在/resources/dal/task.php

<?php 
namespace resources\dal; 

class task 
{ 
public $result; 
public function __construct() 
{ 
    try { 
     # MySQL with PDO_MYSQL 
     $DBH = new PDO('mysql:host=localhost;dbname=test', 'root',  'abc123'); 
     $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION,  PDO::NULL_EMPTY_STRING); 
    }  
    catch(PDOException $e) { 
     echo "I'm sorry. Please try again later."; 
     file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND); 
    } 
} 

public function __destruct() 
{ 
    $DBH = null; 
} 

public function select() 
{ 
    $STH = $DBH->prepare("SELECT * FROM task"); 
    $STH->execute(); 
    $result = $STH->fetch(PDO::FETCH_ASSOC); 
    $this->result = $result; 
} 
} 
?> 

這裏一個數據訪問層類是我的主頁(裏面的public_html) index.php文件

<?php 
    spl_autoload_extensions(".php"); 
    spl_autoload_register(function ($class) { 
    require $_SERVER["DOCUMENT_ROOT"] . '/../' . $class . '.php'; 
    }); 

use resources\dal as DAL; 

$taskClass = new DAL\task(); 
$result = $taskClass->select(); 
    var_dump($result); 
?> 

和我得到這個錯誤:

Warning: require(D:/DevelopmentWebSite/public_html/../resources\dal\PDO.php): failed to open stream: No such file or directory in D:\DevelopmentWebSite\public_html\index.php on line 14

Fatal error: require(): Failed opening required 'D:/DevelopmentWebSite/public_html/../resources\dal\PDO.php' (include_path='.;C:\php\pear') in D:\DevelopmentWebSite\public_html\index.php on line 14

對不起,我正在退出e PHP新手。任何人有什麼想法是什麼錯?

+0

我無法在Windows非常熟悉PHP但是你嘗試過改變 「/」 與「\」? – matteomattei 2012-08-11 08:52:29

+0

我猜你沒有啓用PDO擴展。如果你這樣做,它不會要求你的自動加載器加載'PDO'類... – DCoder 2012-08-11 09:42:52

回答

4

您正在使用本地變量DBH。這意味着它在構造函數結束時會丟失。

您可以創建成員變量: protected $DBH

在構造函數中:$this->DBH = new PDO(...

使用:$this->DBH->prepare(...

+0

這就是它。我再次從頭開始學習。我回頭看這個問題,這是一個愚蠢的問題。 「$ this」非常重要。感謝user1591984 – 2012-08-12 10:08:57