PHP';s define()不能与PDO连接字符串一起使用?

PHP';s define()不能与PDO连接字符串一起使用?,php,pdo,Php,Pdo,我使用PHP的define()为我的PDO连接字符串定义常量,例如在mysqli中。然而,它似乎不起作用。我不断收到错误:连接失败:当我使用下面的代码时,用户“root”@“localhost”(使用密码:否)的SQLSTATE[HY000][1045]访问被拒绝。: 当我没有使用PHP的define()函数来传递连接变量时,PDO连接字符串将起作用。我正在使用PHP7、MySQL 8和Apache2.4 问题代码如下: 错误报告(E_ALL)//检查所有类型的错误 ini_集('display

我使用PHP的define()为我的PDO连接字符串定义常量,例如在mysqli中。然而,它似乎不起作用。我不断收到错误:
连接失败:当我使用下面的代码时,用户“root”@“localhost”(使用密码:否)的SQLSTATE[HY000][1045]访问被拒绝。

当我没有使用PHP的define()函数来传递连接变量时,PDO连接字符串将起作用。我正在使用PHP7、MySQL 8和Apache2.4

问题代码如下:

错误报告(E_ALL)//检查所有类型的错误
ini_集('display_errors',1);//如果发生任何情况,请显示这些
//数据库连接常数
定义('DB_HOST','localhost');
定义('DB_USER','root');
定义('DB_PASS','root');
定义('DB_NAME'、'gallery_DB');
回声分贝_通道;
//phpinfo();
//$conn=mysqli\u connect(DB\u主机、DB\u用户、DB\u密码、DB\u名称);
试一试{
$dbc=new-PDO(“mysql:host=“.DB_-host.”dbname=“.DB_-NAME.”,“.DB_-USER,DB_-PASS”);
//将PDO错误模式设置为异常
$dbc->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
若有($dbc){
回声“连接”;
}
}捕获(PDO$e){
echo“连接失败:”..e->getMessage();
}
工作连接代码:

$servername='localhost';
$username='root';
$password='root';
$dbn='gallery_db';
//phpinfo();
试一试{
$dbc=newpdo(“mysql:host=$servername;dbname=$dbn”、$username、$password、,
排列(
PDO::ATTR_ERRMODE=>PDO::ERRMODE_异常,
PDO::ATTR_PERSISTENT=>false
));
//将PDO错误模式设置为异常
$dbc->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
若有($dbc){
回声“连接”;
}
}捕获(PDO$e){
echo“连接失败:”..e->getMessage();
}

为什么PHP define()在PDO的连接字符串中不起作用?

首先尝试以下方法:

$dbc=new-PDO(“mysql:host=“.DB_-host.”dbname=“.DB_-NAME.”,“.DB_-USER,DB_-PASS”)

这只有两个参数,但PDO需要3个:

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>
改变

$dbc=new-PDO(“mysql:host=“.DB_-host.”dbname=“.DB_-NAME.”,“.DB_-USER,DB_-PASS”)

$dbc=new-PDO(“mysql:host=“.DB_-host.”dbname=“.DB_-NAME,DB_-USER,DB_-PASS”)


您已经在DSN中包含了最后一个逗号:
DB_NAME.,”。DB_用户
确实如此。但它不应该污染问答网站
$dbc = new PDO("mysql:host=".DB_HOST.";dbname=".DB_NAME, DB_USER, DB_PASS);