【问题标题】:How to properly use PHP require [duplicate]如何正确使用PHP需要[重复]
【发布时间】:2017-11-16 00:50:08
【问题描述】:

我有 3 个文件:index.phpdb.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


【解决方案1】:

所以,既然这对你没有意义,我在这里的最后一个答案是你可以做些什么来彻底摆脱这个问题的完整答案:

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 卓有成效的 cmets 和良好的阐述。

【讨论】:

  • 请解释出于知识目的投反对票。
  • 如果您只是删除require,您将遇到$dbh 变量的范围问题
  • 我说好把它从索引中删除,而不是从functions.php中删除。
  • 抱歉,一开始是错字。另外,如果我从 index.php 中删除 require,如果我的 functions.php 文件中有两个函数怎么办?会有两个requires会冲突
  • 您的 dbh 为空,您在创建 PDO 对象时遇到问题。你确定 db.php 代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
  • 2021-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多