PHP - PDO连接字符串中未替换变量

时间:2011-05-10 13:08:52

标签: php pdo

奇怪的问题 - 我有一个数据库类的实时副本(使用PDO)工作正常。我的机器上有一个使用WAMPServer的副本,但没有。

连接字符串如下(该类的片段):

$host = 'localhost';
$user = 'user';
$pass = 'password';
$dbname = 'my_dbname';

self::$_instance = new PDO('mysql:host=$host;dbname=$dbname', $user, $pass);

我收到的错误消息是:

Warning: PDO::__construct() [pdo.--construct]: php_network_getaddresses: getaddrinfo failed: No such host is known. in <path> on line 41

Warning: PDO::__construct() [pdo.--construct]: [2002] php_network_getaddresses: getaddrinfo failed: No such host is kn (trying to connect via tcp://$host:3306) in <path> on line 41

我不知道为什么它不在本地工作,而在线则很好。如果我将线本身改为下面,它可以正常工作:

self::$_instance = new PDO('mysql:host=localhost;dbname=my_dbname', $user, $pass);

谢谢:)

4 个答案:

答案 0 :(得分:9)

使用双引号new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);否则变量不会插入到字符串中。另一种方式可能是

new PDO(sprintf('mysql:host=%s;dbname=%s', $host, $dbname), $user, $pass);

答案 1 :(得分:1)

self::$_instance = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);

您需要使用双引号。

答案 2 :(得分:0)

变量不会用单引号解析。你必须用双引号括起来。

 self::$_instance = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);

答案 3 :(得分:0)

上面的答案都不适用于我。我用:

new PDO("mysql:host=".$host.";dbname=".$dbname, $user, $pass);