Pasé algún tiempo solucionando un problema por el cual una aplicación web PHP/MySQL tenía problemas para conectarse a la base de datos. Se podía acceder a la base de datos desde el shell y phpMyAdmin con las mismas credenciales exactas y no tenía sentido.
Resulta que la contraseña tenía un signo $ en ella:
$_DB["password"] = "mypas$word";
La contraseña se envía era "mYPAS", que es obviamente erróneo.
¿Cuál es la mejor forma de solucionar este problema? Escapé del $ con un \
$_DB["password"] = "mypas\$word";
y funcionó.
Generalmente utilizo $string = 'test'
para cadenas, que es probablemente la forma en que evité toparme con esto antes.
¿Este comportamiento es correcto? ¿Qué pasa si esta contraseña se almacenó en una base de datos y PHP la retiró? ¿Se produciría este mismo problema? ¿Qué me falta aquí ...
Gracias por su respuesta. Parece que este es un problema de mejores prácticas. Con informes de errores estrictos, esto puede haber sido recogido más rápido. De mi pregunta original: ¿podría ser esto un problema al tomar contraseñas de la base de datos o PHP escapará del signo $? – ncatnow
@ncatnow: no puede ser un problema porque las sustituciones solo se realizan en cadenas entre comillas dobles ("cadena"). Cuando lee una cadena de la base de datos, PHP la lee internamente, por lo que no está usando las cadenas entre comillas dobles para establecerla (o incluso las comillas simples). Imagine que el compilador reemplaza todas las $ cosas ** justo antes de ** establecer la variable. –
Es solo un problema para cadenas escritas directamente en su código fuente, usando comillas dobles. Deben aparecer físicamente '" como $ this "' en un archivo fuente '.php'. Las cadenas de la base de datos, de un archivo, del usuario, etc. no están sujetas a interpolación. –