php - last - SQL query escaping+codeigniter
return query result in codeigniter (2)
Estoy confundido sobre por qué dices que no puedes usar la clase Active Record con CI, esta es una simple llamada SQL (el siguiente ejemplo usa el método de encadenamiento ):
$this->db->select(''*'')->from(''user_language'')->where(''user_id'', $id);
$query = $this->db->get();
Su $id
se escapa correctamente y mitiga cualquier inyección. Personalmente uso AR siempre que sea posible, me permite escribir código rápido y eficiente, y no preocuparme por las cosas malas con las llamadas SQL (consultas personalizadas).
Estoy usando codeigniter y la mayoría de las veces uso el registro activo para mis consultas (que automáticamente se les escapa), pero esta consulta no parece encajar perfectamente en ella debido a la variable. Así que tengo que averiguar cómo escapar de la consulta de forma manual.
Codeigniter sugiere que se escapen las consultas de esta manera:
$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";
Mi consulta original
$sql = "SELECT * FROM (`user_language`) WHERE `user_id` = ''{$id}''";
Mi consulta escapada
$sql = "SELECT * FROM (`user_language`) WHERE `user_id` = ''{$id}'' VALUES(".$this->db->escape($user_language).")";
Pero estoy teniendo problemas para obtener la sintaxis correcta. Los mensajes de error son:
- Mensaje de error de PHP: variable no definida: user_language
- Error de SQL: sintaxis incorrecta ... cerca de ''VALUES (NULO)'' en la línea 1
$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . $this->db->escape($id);
si desea seleccionar el idioma del usuario dado por $ id, debería funcionar de esa manera.
tratar con números una alternativa sería:
$sql = "SELECT * FROM `user_language` WHERE `user_id` = " . (int)$id;
codeigniter también admite declaraciones preparadas como "enlaces de consulta":
El beneficio secundario de utilizar bind es que los valores se escapan automáticamente, lo que genera consultas más seguras. No tiene que recordar escaparse manualmente de los datos; el motor lo hace automáticamente por usted.