Me enfrenta un pequeño problema. Estoy trabajando en una aplicación en este momento que requiere el uso de nombres dinámicos de tablas en MySQL.Escapar de forma segura los nombres de tablas dinámicas en MySQL usando Codeigniter
Básicamente, tengo un proceso de selección de álbumes de una base de datos basado en una serie de factores (género, duración de la reproducción, fecha de lanzamiento, etc.) - Hay una sección de este proceso que permite al usuario crear un montón de filtros personalizados ..
Los filtros personalizados devuelven un recuento al usuario de todos los álbumes dentro de ese criterio de selección. Las ID de esos álbumes se almacenan en una tabla con un número de serie/hash generado aleatoriamente (por ejemplo, albumSelección_20880f9c05d68a)
Lo hice de esta manera porque no quería almacenar una gran lista separada por comas en un campo (Realmente tonto) - Y no me apetecía enviar una matriz de valores a un campo oculto en mi HTML, ya que esto solo aumentaría el rendimiento de los datos (podrían ser miles de filas a la vez)
En CodeIgniter, estoy usando enlaces de consulta para generar mis consultas SQL, así:
select * from artists where artistName = ? AND albumTitle = ?
la consulta se escapó entonces de forma automática cuando parametrizar la consulta
$query = $this->db->query($sql,array("Singer","Album"));
Ahora viene la parte difícil
Si escribo mi consulta a ser algo como esto:
$sql = "select albumid from albums where albumid in (select albumid from albumSelect_?)";
$this->db->query($sql,array('20880f9c05d68a'));
La consulta resultante se convierte en:
select `albumid` from `albums` where `albumid` in (select `albumid` from `albumSelect_'20880f9c05d68a'`)
Y muy con razón, pero obviamente la consulta no es válida ...
Edición: Más información
La consulta podría ser parte de una consulta más grande, dependiendo de qué criterios el usuario selecciona. p.ej.
$sql = "select albumid from albums where albumid in(select albumid from tags where tag = ?) AND albumid in(select albumid from albumSelect_?)";
Me preguntaba si había una manera de conseguir este trabajo, o si alguien pudiera sugerir una alternativa mejor .. La concatenación del nombre de la tabla es, obviamente, no una opción.
¡Gracias de antemano!
de Dave
Si hubiera normalizado sus datos, no tendría que hacer esto * o * almacenar una lista de álbumes separados por comas. Esto se llama una relación "tiene muchas cosas a través". – Xeoncross