在多个 PHP 脚本中引用连接文件

Posted

技术标签:

【中文标题】在多个 PHP 脚本中引用连接文件【英文标题】:Refrencing connection file in multiple PHP scripts 【发布时间】:2019-12-28 08:55:17 【问题描述】:

我在理解如何在多个 php 脚本中正确引用以下连接文件时遇到了一些麻烦。

数据库配置文件:

Config.php

/**
 * Database config variables
 */
define("DB_HOST", "localhost");
define("DB_USER", "username");
define("DB_PASSWORD", "password");
define("DB_DATABASE", "dbName");
?>

连接文件:

DB_Connect.php

<?php
class DB_Connect 
    private $conn;

    // Connecting to database
    public function connect() 
        require_once 'include/Config.php';

        // Connecting to mysql database
        $this->conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);

        // return database handler
        return $this->conn;
    


?>

PHP 文档的连接头:

下面的PDO脚本的连接头应该怎么写:

<?php





  $options = [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES => false,
  ];

  $conn = new PDO("mysql:host=$hostdb;dbname=$namedb;charset=$charset", $userdb, $passdb, $options);

  $stmt = $conn->prepare("SELECT `column1`
    FROM `Table1` ");

  $stmt->execute([]);

  $row = $stmt->fetchAll(PDO::FETCH_ASSOC);

  echo json_encode($row);


?>

【问题讨论】:

为什么要使用 2 种不同的 API 类型来连接/使用同一个变量? 【参考方案1】:
class DB_PDO_Connect 
    private $db;

    // Connecting to database
    public function connect() 

        if(!isset($this->db))
            require_once 'include/Config.php';

            $this->db = new PDO("mysql:dbname=DB_DATABASE;host=DB_HOST;", DB_USER, DB_PASSWORD,
                array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
            $this->db->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL );
            $this->db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
            $this->db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING ); // debug
        
        return $this->db;
    

使用

$myPDO =new DB_PDO_Connect();
$conn=$myPDO->connect();
$stmt = $conn->prepare("SELECT `column1` FROM `Table1` ");
//...

【讨论】:

你能解释一下你做了什么来帮助解决这个问题吗?这样,每个人都赢了。 trans Connection File mysqli to pdo ~ 好像不行,DB_PDO_Connect这个类应该去哪里? 您能解释一下 PHP 文件是如何引用 DB_PDO_Connect() 函数的吗?我应该这样做require_once 'include/DB_Connect.php'; 我收到错误:致命错误:找不到类“DB_PDO_Connect”【参考方案2】:

首先,这个 DB_Connect 类毫无意义。理论上它添加了一些抽象的“抽象”,但实际上它只是一段无用的代码。所以只是摆脱它。

然后创建一个名为pdo.php 的文件并添加以下代码(基于我的How to connect to MySQL using PDO 规范示例):

$host = '127.0.0.1';
$db   = 'dbname';
$user = 'username';
$pass = 'password';
$charset = 'utf8mb4';

$options = [
    \PDO::ATTR_ERRMODE            => \PDO::ERRMODE_EXCEPTION,
    \PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
    \PDO::ATTR_EMULATE_PREPARES   => false,
];
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try 
     $pdo = new \PDO($dsn, $user, $pass, $options);
 catch (\PDOException $e) 
     throw new \PDOException($e->getMessage(), (int)$e->getCode());

然后只需将此文件包含在任何需要数据库交互的脚本中

<?php

require $_SERVER['DOCUMENT_ROOT'].'/includes/pdo.php';

$stmt = $pdo->query("SELECT `column1` FROM `Table1` ");
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($rows);

注意$_SERVER['DOCUMENT_ROOT'] 的东西。它用于使您的文件可从任何目录使用。我在using correct filesystem paths的另一篇文章中对此进行了解释

【讨论】:

以上是关于在多个 PHP 脚本中引用连接文件的主要内容,如果未能解决你的问题,请参考以下文章

PHP 连接数据库啥情况下才会用到持久链接 mysql

verilog 中顶层模块实例引用多个模块时端口怎么连接

verilog 中顶层模块实例引用多个模块时端口怎么连接

执行 PHP 脚本以从 Android 连接服务器的路径 [关闭]

执行 PHP 脚本以从 Android 连接服务器的路径 [关闭]

jquery中ajax方法load get post与脚本文件如php脚本连接时,脚本怎样接受数据?