我在许多PHP文件中使用相同的代码块,有时在同一个PHP文件中(例如,当有if/else
时。我知道有更好的方法,但我不太确定要做到这一点。我想用一些东西替换这个大块,但不确定是什么适合。require
也许?
$hostname = 'localhost';
$database = 'dev_testing';
$username = 'root';
$password = 'XXXXXX';
$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
答案 0 :(得分:5)
@maalls和@TahaPaksu的答案很好,但@ marcB的评论甚至更好:通常你只想在每个脚本执行时连接到数据库一次。我不想在dependency injection的方向上向你踢你,但作为一个中间解决方案,我想建议这个类看起来大致像一个单身,但实际上是{ {3}}模式实现(另请参阅Memoization了解其他模式示例)。
无论如何:代码:
gem
在您的脚本中,您可以使用
调用它class Database() {
static private $connection = null;
public static function getConnection() {
if (static::$connection === null) {
$hostname = 'localhost';
$database = 'dev_testing';
$username = 'root';
$password = 'XXXXXX';
$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
static::$connection = $dbh;
}
return static::$connection;
}
}
您可以根据需要随时调用该行,但只有在第一次调用该脚本时才会连接到数据库。后续调用将返回相同的连接。这将为您的数据库节省相当多的开销。
答案 1 :(得分:3)
创建一个单独的文件(例如" connection.php"),将代码放入其中,并在您需要的任何地方,在代码的开头包含以下内容:
require_once('connection.php');
答案 2 :(得分:3)
你可以使用你在php文件中包含的全局函数:
require_once("db.php");
档案db.php
:
function db_connect(){
$hostname = 'localhost';
$database = 'dev_testing';
$username = 'root';
$password = 'XXXXXX';
$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $dbh;
}
并在您的文件中:
$dbh = db_connect();
...
// don't forget to close db before you open a new connection!
$dbh = null;