我正在尝试连接到数据库,同时从连接中删除数据库配置信息。
这是我写的代码
数据库配置信息:
$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;
来看看里面有什么,并确保它不是什么奇怪的东西。