2011-05-10 2 views
0

Problème étrange - J'ai une copie en direct d'une classe de base de données (utilisant PDO) qui fonctionne correctement. J'ai une copie sur ma machine en utilisant WAMPServer qui ne fonctionne pas.PHP - Variables non remplacées dans la chaîne de connexion PDO

La chaîne de connexion est la suivante (un extrait de la classe):

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

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

Les messages d'erreur que je reçois sont:

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 

Je ne sais pas pourquoi cela ne fonctionne pas localement alors en ligne c'est bien. Si je change la ligne elle-même au-dessous fonctionne très bien:

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

Merci :)

+0

Comment cela va remplacer les variables mate lorsque vous utilisez le guillemet simple? – kta

Répondre

8

Utilisez des guillemets doubles new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); sinon les variables ne seront pas insérés dans la chaîne. Un autre moyen pourrait être

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

Cela fonctionne - merci. Mais pourquoi cela fonctionne-t-il en direct mais pas localement en utilisant des singles? – lethalMango

+1

peut-être il y a un serveur de secours et une base de données définie sur le système en direct. – DanielB

+0

Ok merci :) J'accepterai quand le temps sera écoulé – lethalMango

0

Les variables ne sont pas analysées avec des guillemets simples. vous devez les joindre avec des guillemets doubles.

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

Vous devez utiliser des guillemets doubles.

0

Les deux réponses ci-dessus ne fonctionnent pas par moi. J'utilise:

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