special - substr_replace php
PHP: "... las variables se pueden pasar por referencia" en str_replace()? (3)
Creé una función para imprimir una cadena preparada de instrucción con las variables en ella, en base a lo que encontré en esta otra pregunta de StackOverflow .
Aquí está mi código:
foreach($params as $idx => $param) {
if ($idx == 0) continue;
$sql = str_replace(''?'', "''" . $param . "''", $sql, 1);
}
printError($sql);
Cuando ejecuto esto recibo: Fatal error: Only variables can be passed by reference
para la línea 3. Sin embargo, cuando uso
$sql = preg_replace(''//?/'', "''" . $param . "''", $sql, 1);
para la línea 3 funciona bien.
¿Alguna idea de por qué?
El último parámetro, cuenta, se pasa por referencia. Puede ver esto en la descripción en http://us.php.net/str_replace donde hay un &
delante de la variable.
Esto significa que no puedes usar un literal 1
allí. Tendrías que hacer
$sql = str_replace(''?'', "''" . $param . "''", $sql, $count);
echo $count;
Ahora habrás mostrado en la pantalla cuántas instancias fueron reemplazadas.
Mire la documentación de preg_replace
y str_replace
y verá por qué. El cuarto argumento de str_replace
debe pasar por referencia, pero este no es el caso de preg_replace
.
Reescribo desde VoteyDisciple
$sqlLogin = "SELECT * FROM users inner join role on users.roleId = role.id WHERE email=?1 and password=?2";
function makeSql() {
$args = func_get_args();
if(isset($args[1])) {
$len = sizeof($args);
//var_dump($args);
$sql = $args[0];
for ($index = 1; $index < $len; $index++) {
$sql = str_replace(''?''.strval($index), "''" . $args[$index] . "''", $sql);
}
return $sql;
}
return $args[0];
}
$sql = makeSql($sqlLogin, $myusername1, $mypassword);
$result = mysqli_query($con, $sql);