c++ - para - instalar sqlite
¿Puedo usar parámetros para el nombre de la tabla en sqlite3? (2)
Tengo una sensación extraña sobre los parámetros de sqlite3 que me gustaría exponerte.
Esta es mi consulta y el mensaje de error:
#query
''SELECT id FROM ? WHERE key = ? AND (userid = ''0'' OR userid = ?) ORDER BY userid DESC LIMIT 1;''
#error message, fails when calling sqlite3_prepare()
error: ''near "?": syntax error''
En mi código, parece que:
// Query is a helper class, at creation it does an sqlite3_preprare()
Query q("SELECT id FROM ? WHERE key = ? AND (userid = 0 OR userid = ?) ORDER BY userid DESC LIMIT 1;");
// bind arguments
q.bindString(1, _db_name.c_str() ); // class member, the table name
q.bindString(2, key.c_str()); // function argument (std::string)
q.bindInt (3, currentID); // function argument (int)
q.execute();
Tengo la sensación de que no puedo usar los parámetros de sqlite para el nombre de la tabla, pero no puedo encontrar la confirmación en la API C de Sqlite3 .
¿Sabes lo que está mal con mi consulta?
¿Debo preprocesar mi instrucción SQL para incluir el nombre de la tabla antes de preparar la consulta?
Sé que esto ya es muy viejo, pero como su consulta es solo una cadena, siempre puede agregar el nombre de la tabla como este en C ++:
std::string queryString = "SELECT id FROM " + std::string(_db_name);
o en el objetivo C:
[@"SELECT id FROM " stringByAppendingString:_db_name];
Ooookay, debería haber mirado más a fondo en SO.
Respuestas
- Parámetros de SQLite - No se permite el nombre de tabla como parámetro
- Nombre de la tabla de variables en sqlite
Están diseñados para Python, pero supongo que lo mismo se aplica a C ++.
tl; dr :
No puede pasar el nombre de la tabla como parámetro.
Si alguien tiene un enlace en la documentación de SQLite donde tengo la confirmación de esto, con mucho gusto aceptaré la respuesta.