PHP: variables no reemplazadas en la cadena de conexión PDO

Problema extraño: tengo una copia en vivo de una clase de base de datos (usando PDO) que funciona bien. Tengo una copia en mi máquina usando WAMPServer que no la tiene.

La cadena de conexión es la siguiente (un fragmento de la clase):

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

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

Los mensajes de error que recibo son:

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

No tengo idea de por qué no funciona localmente, mientras que en línea está bien. Si cambio la línea en sí a la siguiente, funciona bien:

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

Gracias :)

preguntado el 10 de mayo de 11 a las 13:05

¿Cómo reemplazará las variables mate cuando use la comilla simple? -

4 Respuestas

Usa comillas dobles new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); de lo contrario, las variables no se insertarán en la cadena. Otra forma podría ser

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

contestado el 10 de mayo de 11 a las 17:05

Eso funciona, gracias. Pero, ¿por qué funciona en vivo pero no localmente usando solteros? - letalMango

tal vez haya un servidor de reserva y una base de datos definidos en el sistema en vivo. - DanielB

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

Debe utilizar comillas dobles.

Respondido 11 Feb 15, 02:02

Las variables no se analizan con comillas simples. tienes que encerrarlos entre comillas dobles.

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

contestado el 10 de mayo de 11 a las 17:05

Ambas respuestas anteriores no funcionan para mí. Yo suelo:

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

respondido 23 nov., 12:00

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.