定义了var字符串的新PDO问题

时间:2016-05-13 14:57:22

标签: php pdo

当我使用预定义的变量调用新的PDO时,我遇到了一个问题。

我得到了这个

define('SQL_BDD', 'ctms_demo');

在我的config.php中,在每个.php页面中调用,所以我可以在任何地方使用它

我称之为

$hostname='localhost';
$dbname='ctms_demo'; 
$username='root';
$password='password';

$set = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);

它工作正常,但是当我改变这一行时

$dbname=SQL_BDD;

它不再起作用..

我找了一些话题,谈论使用双引号是好的..所以我真的没有看到问题出在哪里..

编辑:我添加了这个:

$dsn = sprintf('mysql:host=%s;dbname=%s',$hostname,SQL_BDD);
print_r($dsn);
$set = new PDO($dsn, $username, $password);

我得到了“mysql:host = localhost; dbname = ctms_demo”,所以定义的var工作正常..我不明白..

1 个答案:

答案 0 :(得分:0)

常量不会在引号内扩展,所以要突破它们:

$set = new PDO("mysql:host=$hostname;dbname=" . SQL_BDD, $username, $password);

双引号内变量的魔力是$。 PHP解析器应该如何知道你的意思是常量SQL_BDD而不是文本SQL_BDD?检查字符串中的每个单词并在定义的常量表中查找它将是一项非常昂贵的操作。