2012-08-15 85 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