2011-05-10 55 views
0

奇怪的问题 - 我有一个正常工作的数据库类(使用PDO)副本。我在我的机器上使用WAMPServer没有。PHP - PDO连接字符串中未被替换的变量

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

$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); 

谢谢:)

+0

如何在使用单引号时替换变量匹配? – kta 2014-02-04 09:01:44

回答

8

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

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

这工作 - 谢谢。但是,为什么它能够在现场使用,而不是在本地使用单身? – lethalMango 2011-05-10 13:11:15

+1

也许在实时系统上定义了一个后备服务器和数据库。 – DanielB 2011-05-10 13:12:47

+0

好的谢谢:)时间到了,我们会接受 – lethalMango 2011-05-10 13:13:42

0

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

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

您需要使用双引号。

0

以上两个答案都不适用于我。我使用:

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