正在将数据库配置与连接分离



我正在尝试连接到数据库,同时从连接中删除数据库配置信息。

这是我写的代码

数据库配置信息:

$config = array(
"database" => array(
"host" => "host",
"username" => "username",
"password" => "password",
"name" => "name",
)
);
define("databse_config", $config["database"]);

$confignormaly还包含与问题无关的其他信息,这就是我定义"database_config"的原因。

数据库连接:


require_once "config.php";
define("DB_HOST", databse_config['host']);
define("DB_USERNAME", databse_config['username']);
define("DB_PASSWORD", databse_config['password']);
define("DB_NAME", databse_config['name']);
function connect()
{
$dbhost = DB_HOST;
$dbuser = DB_USERNAME;
$dbpass = DB_PASSWORD;
$dbname = DB_NAME;
try {
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
$conn->exec("set names utf8");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $conn;
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
}
connect();

我一直在运行的问题是,在试图执行页面不断加载的功能时,最终会输出以下错误:

连接失败:SQLSTATE[HY000][2002]连接超时

我对PDO还很陌生,所以我在使用mysqli时也尝试了同样的方法,得到了同样的结果。

如有任何帮助,我们将不胜感激。

连接失败:SQLSTATE[HY000][2002]连接超时

这意味着php试图建立与数据库服务器的TCP/IP连接,但失败了。您提供了一个DB_HOST主机名,网络无法从php程序的位置访问该主机名。

主机名值可能丢失,也可能是错误的。如果您按名称(mysql-server.example.com(提供,则此错误消息告诉DNS名称查找成功。

因此,php向服务器发送一个请求TCP/IP连接。该请求从未得到回应。这意味着某个地方有防火墙阻止了连接,或者从php程序到网络没有网络路由。

这意味着new PDO()操作中的$dbhost值是错误的。

您的代码可以像这样简化,而不会损失模块性。sprintf()有帮助。故障排除越简单越好。

require_once "config.php";
function connect()
{
try {
$connectionString = sprintf ("mysql:host=%s;dbname=%s", 
database_config['host'],
database_config['name']);
$conn = new PDO($connectionString, 
database_config['username'],
database_config['password']);
$conn->exec("set names utf8");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $conn;
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
}    
connect();

你可以echo $connectionString;来看看里面有什么,并确保它不是什么奇怪的东西。

最新更新