【发布时间】:2017-11-16 00:50:08
【问题描述】:
我有 3 个文件:index.php、db.php(数据库)和 functions.php
这是每个文件中的示例:
数据库.php:
define ("DB_HOST", "localhost");
define ("DB_USER", "root");
define ("DB_PASS", "1234");
define ("DB_NAME", "test");
try {
$dsn = "mysql:dbname=".DB_NAME.";host=".DB_HOST;
$dbh = new PDO($dsn, DB_USER, DB_PASS);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
index.php:
require $_SERVER['DOCUMENT_ROOT']."/config/db.php";
require $_SERVER['DOCUMENT_ROOT']."/config/functions.php";
if(isLoggedIn()) {
echo "hi";
}
functions.php:
function isLoggedIn() {
require $_SERVER['DOCUMENT_ROOT']."/config/db.php";
$stmt = $dbh->prepare("SELECT * FROM users....");
$stmt->execute();
}
我得到的错误是:
注意:常量 DB_HOST 已在 /var/www/config/database.php 中定义
我尝试了什么:
我尝试在我的所有文件中将require 替换为require_once,但它给出的错误在这里:
致命错误:未捕获的错误:在functions.php中调用一个成员函数prepare() on null
【问题讨论】:
-
把你所有的
require改成require_once -
更好的是,从
functions.php中删除require并将$dbh作为参数传递给您的isLoggedIn函数 -
此外,如果 PDO 无法连接到您的数据库,您的应用程序将继续运行。我建议在您的
catch块中放置一个exit或完全删除try...catch -
@KrisRoofe 抱歉,请看我的编辑
标签: php mysql error-handling include require