Cita:
Iniciado por NSD
Se me ocurre otra variante que hace laburar un poco mas a la base de datos pero que no altera tanto tu código original y emula el efecto que quieres lograr:...
Grácias por tu respuesta NSD, por desgracia no me han funcionado ninguna de las dos maneras que me comentaste:
Método 1:
Código PHP:
//Cargo variables
$nombre = 'Juan';
$telf = 1234567890;
echo recuperarMensajedesdeBD(get_defined_vars());
function recuperarMensajedesdeBD($vars)
{
global $conexion;
$field = "mensaje";
foreach($vars as $key => $val)
$field = 'REPLACE('.$field.', \'{$'.$key.'}\', \''.str_replace('\'', '\\\'', $val).'\')';
$consulta = mysql_query("SELECT $field FROM mensajes WHERE id=1", $conexion);
$mensaje = mysql_fetch_array($consulta);
return $mensaje[0];
Me salta el error "Warning: Invalid argument supplied for foreach()..."
Método 2:
Código PHP:
function recuperarMensajedesdeBD($vars)
{
global $conexion;
$consulta = mysql_query("SELECT mensaje FROM mensajes WHERE id=1", $conexion);
$mensaje = mysql_fetch_array($consulta, MYSQL_NUM);
foreach($vars as $key => $val)
$mensaje[0] = str_replace('{$'.$key.'}', $val, $mensaje[0]);
return $mensaje[0];
}
echo recuperarMensajedesdeBD(array("nombre" => $nombre, "telf"=> $telf));
Me dice que las variables $nombre y $telf no están definidas...
Sin embargo, la solución ofrecida por Italico76 ha sido la solución, no pensé que sería tan simple...
Cita:
Iniciado por Italico76
Código PHP:
$expresion = 'Un valor que no es interpolable por codigo PHP: $ejemplo';
$ejemplo = 'si es iterpolable!';
eval("\$str = \"$expresion\";");
echo $str;
Así es como funcionó...
Código PHP:
recuperarMensajedesdeBD();
function recuperarMensajedesdeBD() {
global $conexion;
$consulta = mysql_query('SELECT mensaje FROM mensajes WHERE id=1', $conexion);
$mensaje = mysql_fetch_array($sonculta);
interpolar($consulta[0]);
}
function interpolar($texto) {
$nombre = 'Juan';
$telf = 1234567890;
eval("\$str = \"$texto\";");
echo $str;
}
Grácias a ambos por vuestra ayuda!!!