作为一个新手,我想了解一下关于数据库连接的事情。
我从PHP教程开始,该教程具有以下结构:
Connect.php
<?php
$username = "dbusername";
$password = "dbpassword";
$host = "localhost";
$dbname = "dbname";
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
try
{
$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options);
}
catch(PDOException $ex)
{
die("Failed to connect to the database: " . $ex->getMessage());
}
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
header('Content-Type: text/html; charset=utf-8');
session_start();
?>
Login.php
<?php
require("connect.php");
// some code not important for this question,
//that handles login with a session…
?>
various_file_in_the_login_system.php
<?php
require("connect.php");
// some code that checks if user is logged in with session_ …
// some code that does need the database connection to work
?>
所有其他文件也包含require("connect.php");
行。它工作,但我只是不知道这些连接请求到服务器 - 我可能没有使用正确的词汇 - 最终做到服务器。如果连接没有超时,它们是多余的,不是吗?
我发现了一篇关于为PDO做单身人士的帖子,以及一篇让我觉得我生活中永远不会使用持久连接的帖子。
此设计是否会导致连接过度搅拌?
也许服务器每秒可以处理很多连接请求,也许服务器有自己的内部持久连接模式,或实现连接池... 或者PDO对象无缘无故地处理经常询问连接的问题......
PDO + Singleton : Why using it?
What are the disadvantages of using persistent connection in PDO
答案 0 :(得分:1)
这是我建议的数据库连接: 为连接创建一个类:
class Database{
private static $link = null ;
public static function getConnection ( ) {
if (self :: $link) {
return self :: $link;
}
$dsn = "mysql:dbname=social_network;host=localhost";
$user = "user";
$password = "pass";
self :: $link = new PDO($dsn, $user, $password);
return self :: $link;
}
}
然后你可以得到这样的连接:
Database::getConnection();
Singleton模式难以扩展 - 但是,我认为它可能对您的需求很好。它需要大量的数据库负载。
我认为你无法避免多重包含。
有一个用于在每个脚本前添加文件的php.ini设置 - &gt; http://www.php.net/manual/en/ini.core.php#ini.auto-prepend-file
答案 1 :(得分:1)
你如何改变
require_once('connect.php');
在所有地方?
此外,您应该从与建立数据库连接有关的代码段中删除session_start()
和HTTP标头逻辑。这根本没有意义。