2010-06-29 8 views
0

Nous faisons notre tout premier jeu iPhone, et si l'utilisateur obtient un score élevé, nous devons les laisser entrer leur nom pour le stocker dans la base de données des meilleurs scores dans l'application.SQLITE et désinfection des entrées iPhone

Ce que je me demandais, c'est comment allons-nous nettoyer l'entrée sur l'iPhone. Évidemment, nous ne voulons pas les laisser tomber des tables lors de la saisie de leur nom!

Quelqu'un peut-il donner des conseils ou pousser dans la bonne direction?

Merci, Dwaine

+0

Utilisez-vous SQLite directement ou utilisez-vous Core Data avec un magasin SQL? – TechZen

+0

J'utilise SQLite directement je pense ... Je viens de créer une base de données SQLite dans Terminal, je l'ai ajouté au projet, puis je fais des appels sqlite3 comme: statique char * sql = "INSERT INTO scores (hsName , hsScore) VALEURS (?,?) "; sqlite3_prepare_v2 (appDelegate.database, sql, -1 et writeScoresStmt, NULL); Puis lier les valeurs en utilisant sqlite3_bind_text et sqlite3_bind_int –

Répondre

1

À tout le moins, vous devriez utiliser des requêtes paramétrées.

Par exemple:

sqlite3_reset(insertStatement); 

sqlite3_bind_text(insertStatement, 1, [userInput UTF8String], -1, SQLITE_TRANSIENT); 

if(SQLITE_DONE != sqlite3_step(insertStatement)) 
{ 
    //handle error 

//etc... 

Vous pouvez également utiliser et appuyer sur base de données pour gérer les détails de mise en œuvre. Ce serait ma recommandation.

+0

Salut Don, C'est ce que je fais. Je suis juste inquiet à propos des gens qui essaient d'abandonner mes tables ou de supprimer la base de données en entrant leur nom. Ou est-ce que ça contourne ça? –

+1

Oui, les attaques par injection SQL supposent que vous construisez la chaîne de requête en mémoire. Les requêtes paramétrées utilisant, disons, des données de chaîne autorisent uniquement les données de chaîne et traitent l'entrée comme une chaîne. C'est-à-dire, s'ils essaient de vous obliger à exécuter 'SELECT * FROM utilisateurs WHERE name = 'a'; utilisateurs DROP TABLE;' ils seront envoyés à la base de données comme SELECT SEPTEMBRE utilisateurs WHERE name = "'a'; DROP Utilisateurs de TABLE; "'. – Don