2012-08-15 56 views
0

閱讀了大量的文章後,沒有得到這個東西運行,也許somone可以幫助我這個。設置PDO連接全球的問題

我想包括一個PHP的(Module.php)文件,從數據庫crapin信息到我的index.php。這個index.php還包含帶有數據庫連接的文件。問題是包含的文件它處理數據庫選擇似乎並不瞭解的PDO對象,腳本死亡這個錯誤,其中:

Fatal error: Call to a member function prepare() on a non-object in 

我試圖使PDO對象全局。但不幸的是,這是行不通的。

非常感謝任何幫助(安全我不是要瘋了......)

託尼

的index.php

//DB Connection 
require_once ("include/db_connect_inc.php"); 

$request = $_GET['Controll']; 

switch ($request) { 
case 0: 
    echo "XY"; 
    break; 
case 1: 
    global $objDb; 

//This file should be able to use the DB Object 
    include("modules/Eat/Module.php"); 
    break; 

}

Module.php

global $objDb; 

    $dbSelect = $objDb->prepare(
    "SELECT DISTINCT ON (nummer) nummer 
    FROM tableX 
    " 
); 

$dbSelect->execute(); 

while($row = $dbSelect->fetch(PDO::FETCH_ASSOC)) { 
$all = $row['nummer']; 
} 
echo "1 - " . $all; 

db_connect_inc.php

$strDbLocation = 'pgsql:host=localhost;dbname=test'; 
$strDbUser = 'root'; 
$strDbPassword = 'root'; 

try{ 
    $objDb = new PDO($strDbLocation, $strDbUser, $strDbPassword); 
    $objDb->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
    $objDb->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    global $objDb; 
} 
catch (PDOException $e){ 
    //echo 'Fehler beim Öffnen der Datenbank: ' . $e->getMessage(); 
     print "Error!: " . $e->getMessage() . "<br/>"; 
} 
+1

您對全局的使用完全不正確。您提供的代碼中沒有函數,「$ objDb」與所有文件在相同的範圍內。 – Leigh 2012-08-15 14:08:18

回答

1

你似乎不使用任何功能,您的變量已經在全球範圍內設置,所以你應該破除一切global $objDb;線。

只要連接到數據庫的前3行沒有錯誤,就應該解決問題。

除此之外,我會使用OOP /類,並使用依賴注入來確保我的Module類總是提供它所需的東西(在這種情況下的數據庫連接)。

+0

mhhh ....只有最後一次嘗試之後的全球行。我之前沒有嘗試過。而且它沒有工作。我檢查了這個連接,看起來是正確的。 – 2012-08-15 14:16:53

+0

@t Book沒有任何'global'行會出現什麼錯誤?你可以在每個db連接行('new PDO')之後添加'var_dump($ objDb);'到最後一個'setAttribute'之後)。 – jeroen 2012-08-15 14:17:29

+0

嗨jeroen,錯誤保持不變,如果我踢全球出局致命錯誤:調用成員函數prepare()在一個非對象在 – 2012-08-15 14:21:49