substr_replace str_replace special inside ejemplo characters array php pass-by-reference str-replace

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);