如何正确使用PHP需要

时间:2017-06-14 03:51:19

标签: php mysql error-handling include require

我有3个文件:index.phpdb.php(数据库)和functions.php

以下是每个文件中的示例:

database.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();
}

我得到的错误是:

  

注意:在/var/www/config/database.php

中已经定义了常量DB_HOST

我尝试了什么:

我尝试在所有文件中将require替换为require_once,但它提供的错误在于:

  

致命错误:未捕获错误:在functions.php中调用null上的成员函数prepare()

1 个答案:

答案 0 :(得分:2)

所以,既然它对你没有意义,我在这里的最后一个答案就是你能做些什么来彻底解决这个问题:

db.php

<?php
$host="localhost"; 
$user="root"; 
$password="1234"; 
$db="test"; 

    try {
        $dbh = new PDO("mysql:host=$host;dbname=$db",$user,$password);
    } catch (PDOException $e) {
        die("DB ERROR: ". $e->getMessage());
    }
?>

<强>的index.php

require_once $_SERVER['DOCUMENT_ROOT']."/config/db.php";

if(isLoggedIn($dbh)) {
    echo "hi";
}

<强>的functions.php

function isLoggedIn($dbh) {
$stmt = $dbh->prepare("SELECT * FROM users....");
$stmt->execute(); 
}
function anotherfunction($dbh) {
$stmt = $dbh->prepare("SELECT * FROM others....");
$stmt->execute(); 
}

上述更正将为您节省查看需求的痛苦,您需要db.php一次,以便现在您可以访问其变量并在需要时作为参数传递。

注意:感谢Phil的富有成效的评论和精心的阐述。