Question

J'ai des problèmes en cours d'exécution d'une dynamique déclaration comme dans mon projet: cette requête fonctionne comme un charme et renvoie tous les éléments avec « t » dans leur nom:

const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%%t%%'";

Quand j'essaie de le faire de façon dynamique, je ne reçois pas d'erreurs, mais juste un résultat vide. Il semble que la valeur est nulle. J'essaie de lier une valeur de chaîne « s » qui délivre une valeur correcte

NSLog(@"bbc_ : search menu items from db based on: %@",s);
const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%%?%%'";
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) {
sqlite3_bind_text(statement, 1, [s UTF8String],-1,SQLITE_TRANSIENT);

Comment cette valeur dois-je lier au lieu d'utiliser:

const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%%?%%'";
Était-ce utile?

La solution

Juste trouvé une bonne explication à http://www.innerexception.com/2008/10/using-like-statement-in-sqlite-3-from.html

I lignes modifiées suivant:

const char *sql = "select * from bbc_ipad_v1_node where name LIKE ?001";

et

NSString *searchInput = [NSString stringWithFormat:@"%@%%", s];
sqlite3_bind_text(statement, 1, [searchInput UTF8String],-1,SQLITE_TRANSIENT); 

Autres conseils

Vous pouvez réellement dire simplement

const char *sql = "select * from bbc_ipad_v1_node where name LIKE '%t%'";

(Notez les mono-%s)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top