valor - manejo de variables en php
Dólar($) iniciar sesión cadena de contraseña tratada como variable (8)
El otro responde todo el trabajo hasta que haya comillas simples incrustadas en la contraseña.
Fallar:
$_DB[''password''] = ''my''pas$word'';
Alternativas:
Si no tiene otros caracteres escapados, puede escapar de $ con /$
, por ejemplo
$_DB[''password''] = "my''pas/$word";
O puede ser más simple escapar de la comilla simple, por ej.
$_DB[''password''] = ''my/'pas$word'';
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 tiene un signo $:
$_DB["password"] = "mypas$word";
La contraseña que se envió fue "mypas", lo que obviamente está mal.
¿Cuál es la mejor manera de manejar este problema? Escapé $ con a /
$_DB["password"] = "mypas/$word";
Y funcionó.
Generalmente uso $string = ''test''
para cadenas, que es probablemente la forma en que evité toparme con esto antes.
¿Es este comportamiento correcto? ¿Qué pasa si esta contraseña se almacenó en una base de datos y PHP la retiró? ¿Se produciría este mismo problema? Que me estoy perdiendo aqui...
Las comillas de cadenas con la cita doble se interpretan para las variables. Las cadenas entre comillas se interpretan literalmente.
$a = "one";
$b = "$a";
echo $b . "/n";
$b = ''$a'';
echo $b . "/n";
Esto debería producir:
one
$a
Me encontré con este problema y lo solucioné antes de encontrar este hilo. Estoy seguro de que todas las soluciones con comillas simples funcionan perfectamente. Elegí simplemente concatenar el pase, que también funciona bien ya que no conocía la solución de presupuesto único ... IE
$db_password = "SamWise" . "$" . "GangiTYloYG";
PHP está interpolando la variable $word
en la cadena mypas$word
, como es el comportamiento normal para los literales de cadena delineados con comillas dobles. Como $word
es presumiblemente indefinido, la cadena interpolada resultante es mypas
.
La solución es usar comillas simples. Los literales de cadena única no se someten a interpolación variable.
Simplemente colóquelo en una cadena de una sola cita:
$_DB[''password''] = ''mypas$word'';
La cadena de comillas dobles interpolará las variables, pero las cadenas de comillas simples no lo harán. Entonces eso resolverá tu problema.
Simplemente use comillas simples ''en lugar de'' y no intentará tratar $ word como una variable.
$_DB[''password''] = ''mypas$word'';
use comillas simples
$_DB["password"] = ''mypas$word'';
$_DB[''password''] = ''mypas$word'';
Las cadenas de comillas simples no se procesan y se toman "tal cual". Siempre debe usar cadenas de comillas simples a menos que necesite específicamente las sustituciones de $ variable o secuencias de escape (/ n, / r, etc.). Es más rápido y menos propenso a errores.