2010-07-09 5 views
0

Hmm, pour une raison quelconque, il ne le fait que sur le premier nom d'utilisateur (et mot de passe) et le fait pour la taille de mon vecteur. Des idées sur pourquoi?C++ Mysql Real Escape String Numéro

int eMysql::strip(string &input) { 
    char* from = new char[strlen(input.c_str()) * 3 + 1]; 
    mysql_real_escape_string(&mysql, from, input.c_str(), input.length()); 
    input = input.assign(from); 
    delete from; 
} 

Si son utilisé:

if(query.size() > 0) { 
     mysql->strip(query[0]); 
     mysql->strip(query[1]); 
     mysql->query("SELECT `username` FROM `users` where `username` = '"+ query[0] +"';"); 
+1

Il fait quoi? –

+0

Sa mise dans ma requête Sélectionnez 'username' FROM' users' où 'username' =" BOB413 \ R MOT DE PASSE \ R BOB413 \ R MOT DE PASSE \ R BOB413 \ R MOT DE PASSE \ R BOB413 \ R MOT DE PASSE \ R BOB413 \ R MOT DE PASSE \ R BOB413 \ R MOT DE PASSE \ R BOB413 \ R MOT DE PASSE \ R BOB413 \ R MOT DE PASSE \ R "; – Fellixombc

+0

Plutôt que d'allouer vous-même dynamiquement un tableau, vous pouvez créer un «vecteur » et le redimensionner, quelle que soit sa taille; cela peut donner un code beaucoup plus propre. –

Répondre

1

Je propose la construction de la requête comme une variable chaîne séparée plutôt que de passer le désordre dans l'argument:

static const char fixed_text[] = "SELECT `username` FROM `users` where `username` = '"; 
std::string query_text(fixed_text); 
query_text += query[0]; 
query_text += "';"; 
mysql->query(query_text); 

Cette technique vous permet d'examiner la requête avant qu'elle ne soit envoyée à MySQL.

Je vous suggère d'examiner la variable query[0] pour tous les caractères étranges tels que \r et \n. Le manuel MySql contient une section répertoriant les caractères qui doivent être échappés.

+0

Très bien, va faire, et j'ai d'autres erreurs qui se produisent dans mon programme, donc, je vais aller de l'avant et le réécrire, et avec cela, explorer la documentation sur mysql_real_escape_string – Fellixombc