2016-08-11 50 views
0

我已經搜索了關於這個的每一個答案,沒有人似乎完全回答了發生了什麼。 當試圖用pdo準備語句時,我在標題中出現錯誤。調用成員函數prepare()null - PDO

我曾嘗試:

使用構造函數,而不是

使用非靜態

使用$這個時候我有一個構造函數

捕獲PDO的例外,沒有人可以拋出

這裏是main.php

class db { 
    public static $db; 
    public static $db2; 

    public static function start() { 
     $host = "localhost"; 
     $dbname = "dbname"; 
     $usr = "user"; 
     $ps = "pass"; 

     $pdo = "mysql:host=$host;dbname=$dbname"; 
     $opt = [ 
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 
      PDO::ATTR_PERSISTENT => true 
     ]; 
     try { 
     db::$db = new PDO($pdo, $usr, $ps, $opt); 

     return db::$db; 
     } catch(PDOException $e) { 
      $e->getMessage(); 
     } 
    } 
} 

然後初始化數據庫,我稱之爲啓動功能的index.php中與db::start();

現在,到了錯誤。

在main.php中,在一個完全不同的類和函數中,我試着靜態地調用這個連接。

$stmt0 = db::$db->prepare("SELECT * FROM users WHERE uname=:u"); 

但是完成後,我收到標題中的錯誤,在這一行。

大多數人可能會認爲,嗯,連接必須有錯誤,然後如果它將它調用爲null。如果是這樣的話,有些東西會阻止我的異常被拋出,因爲我在錯誤日誌或頁面上看不到任何東西。

+0

你做,如果try塊失敗$沒有迴音錯誤E->的getMessage (); –

+0

添加回聲,你會看到錯誤 –

+0

回聲沒什麼,我也試過error_log。 – Joel

回答

1

您的PDO無法連接,並且由於您沒有做任何具有該條件的任何事情(您只是默默地放棄它),它已陷入困境。

嘗試刪除try..catch塊。如果連接發生錯誤,您需要知道!

+0

刪除'try..catch'塊,仍然得到準備空錯誤 – Joel

0

我試過http://phpfiddle.org/這個代碼,它的工作原理: (打開URL,對等維護「碼域」並粘貼下面的代碼)

<?php 

class db { 
    public static $db; 
    public static function start() { 
     $opt = [ 
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 
      PDO::ATTR_PERSISTENT => true 
     ]; 
     try { 
      require "util/public_db_info.php"; 
      $db = new PDO($dsn, $user_name, $pass_word); 
      return $db; 
     } catch(PDOException $e) { 
      die($e->getMessage()); 
     } 
    } 
} 

$db = db::start(); 

$result = $db->prepare("SELECT * FROM books WHERE id <= 10"); 
$status = $result->execute(); 

if (($status) && ($result->rowCount() > 0)) 
{ 
    $results = array(); 

    //convert query result into an associative array 
    while ($row = $result->fetch(PDO::FETCH_ASSOC)) 
    { 
     $results[] = $row; 
    } 

    var_dump($results); 

} 


?> 
相關問題