在阅读了很多帖子但没有运行这个东西之后,也许 somone 可以帮助我解决这个问题。
我正在尝试包含一个 PHP(模块.php)文件,该文件将数据库中的信息.php 中掷骰子。此索引.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/>";
}
由于您似乎没有使用任何函数,因此您的变量已经在全局范围内设置,因此您应该删除所有global $objDb;
行。
只要连接到数据库的前 3 行没有错误,这应该可以解决问题。
除此之外,我会使用 OOP/类并使用依赖注入来确保我的 Module
类始终提供它需要的东西(在这种情况下是数据库连接)。