2016-10-01 40 views
-5

我想用PDO連接到mysql,但是當我嘗試創建一個PDO實例時,它導致代碼打破。我試圖把它放在try和catch,但它仍然打破了代碼/我得到一個網頁說:「本地主機頁面不能正常工作」創建一個PDO實例導致錯誤

protected $conn; 

$dsn = "mysql:host=localhost;dbname=Mydatabase"; 
$this->conn = new PDO($dsn, "admin", "test2016"); 

如果我嘗試連接到MySQL這樣的:

$conn = mysqli_connect("localhost", "admin", "test2016"); 

它工作正常。

我不知道爲什麼新的PDO導致該錯誤。

class Database { 

protected $conn; 

function __construct() { 
    $this->init(); 
} 

function init(){ 
    try{ 
    $this->conn= $this->connectDB("localhost","Mydatabase","admin","test2016"); // the here 
    $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    echo "Connected successfully"; 
    }catch(PDOException $e){ 
     echo "Connection failed: " . $e->getMessage(); 
    } 

} 

function connectDB($servername,$database,$username,$password){ 

    $dsn = "mysql:host=localhost;dbname=Mydatabase"; 
    return new PDO($dsn, $username, $password);// i am not sure why new pdo is the cause of the problem 

    // $conn = mysqli_connect($servername, $username, $password); 

    //if (!$conn) { 
     // die("Connection failed: " . mysqli_connect_error()); 
    //} 

    //echo "Connected successfully"; 

} 
+0

爲什麼這裏有mysqli_和PDO?如果你混合這些,你不能。 –

+0

我希望你在這裏使用分號'protected $ conn' – devpro

+0

我沒有在同一時間使用它們。我正在嘗試僅使用其中一個PDO。我正在使用測試,如果MySQL劑量工作。 @ Fred-ii- – user629283

回答

0

根據您的修改,您要呼籲未定義的變量的方法:

function init(){ 
    try{ 
    $this->conn= $this->connectDB("localhost","Mydatabase","admin","test2016"); // the here 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

應該是:

function init(){ 
    try{ 
    $this->conn= $this->connectDB("localhost","Mydatabase","admin","test2016"); // the here 
    $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    ^^^^^ here 
+0

是嗎?但我相信我正在connectDB方法中創建PDO。我想弄清楚爲什麼現在還沒有定義。 – user629283

+0

我明白你的意思了,我已將它改爲'$ this-> conn-> setAttribute(PDO :: ATTR_ERRMODE,PDO :: ERRMODE_EXCEPTION);' ,我仍然顯示「本地主機頁面不工作」 – user629283

-2

這是對工作的一個非常基本的例子想想你想做什麼。

class Database { 

    protected $conn; 

    public function __construct() { 
     $this->init(); 
    } 

    public function init() { 
     try{ 
      $this->conn = $this->connectDB("localhost","Mydatabase","admin","test2016"); 
      $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      if (!$this->conn) { 
       throw new Exception("Connection failed: "); 
      } 
      echo 'Connected'; 
     } catch (PDOException $e) { 
      die($e->getMessage()); 
     } 
    } 

    public function connectDB($servername, $database, $username, $password) { 
     $dsn = "mysql:host=".$servername.";dbname=".$database; 
     return new PDO($dsn, $username, $password); 
    } 

} 

如果此課程不適合您,請測試您的服務器信息,甚至服務器狀態。

我希望這對你有所幫助。

+0

我嘗試過這種方法,但它仍然與創建pdo的實例有關。我猜測我沒有pdo驅動器,或者我錯過了一個設置。 (我在Mac上使用mamp)這是一個噩夢在Mac上做設置> – user629283