2011-05-10 10 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

答えて

8

二重引用符を使用new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); :)おかげで、それ以外の変数は文字列に挿入しません。別の方法があります

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

それは動作します - ありがとう。しかし、なぜそれは生きているが、ローカルではシングルを使用していないのでしょうか? – lethalMango

+1

おそらく、ライブシステムにフォールバックサーバーとデータベースが定義されている可能性があります。 – DanielB

+0

ありがとうございました:)時間が過ぎても受け入れます – lethalMango

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); 
関連する問題