0

在阅读了很多帖子但没有让这个东西运行之后,也许有人可以帮助我。

我正在尝试包含一个 PHP (Module.php) 文件,该文件将 db 中的信息添加到我的 index.php 中。该 index.php 还包括与数据库连接的文件。问题是处理数据库选择的包含文件似乎不知道 PDO 对象,脚本死了这个错误:

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

我试图使 PDO 对象成为全局对象。但不幸的是,这不起作用。

非常感谢您的帮助(确保我不会发疯......)

托尼

索引.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; 

}

模块.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/>";
}
4

1 回答 1

1

由于您似乎没有使用任何函数,因此您的变量已经设置在全局范围内,因此您应该摆脱所有global $objDb;行。

只要连接到数据库的前 3 行没有错误,这应该可以解决问题。

除此之外,我会使用 OOP / classes 并使用依赖注入来确保我的Module类总是提供它需要的东西(在这种情况下是一个 db 连接)。

于 2012-08-15T14:08:56.427 回答