es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

En Laravel, ¿cómo se enlazan los parámetros en una consulta de DB raw cuando se establece el atributo del modelo?

Por ejemplo, tengo mis códigos.

$news = new News();
$news->title = 'hello world';
$new->user = $user_id;
$news->urlcc = DB::raw('crc32("' . $args['newsShortUrlInput'] . '")');
$news->save();
$news->refresh();

Aquí, el atributo $news->urlcc proviene de la entrada del usuario después de usar la función de MySQL crc32(). Debido al problema de la inyección de SQL, los códigos anteriores no son seguros.

Entonces, mi pregunta es cómo vincular los parámetros en DB::raw() con un modelo de Laravel, algo como esto:

$news->urlcc = DB::raw('crc32(:newsShortUrlInput)', ['newsShortUrlInput' => $args['newsShortUrlInput']]);

Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hola,

    La forma correcta de vincular parámetros en DB::raw() con un modelo de Laravel es usar el marcador de posición “?” en la consulta sin procesar y pasar los parámetros como un array a la función DB::raw(). Aquí tienes un ejemplo:

    $news = new News();
    $news->title = 'hello world';
    $news->user = $user_id;
    $news->urlcc = DB::raw('crc32(?)', [$args['newsShortUrlInput']]);
    $news->save();
    $news->refresh();
    

    De esta manera, puedes evitar problemas de inyección SQL ya que los parámetros están correctamente vinculados y escapados por el generador de consultas de Laravel. ¡Espero que esto te ayude! Avísame si tienes alguna otra pregunta.

Comments are closed.