在多个 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 脚本以从 Android 连接服务器的路径 [关闭]