J'ai un problème pour insérer des variables dans ma table sql.
Lorsque je remplace les variables par des chaînes de caractères, la requête fonctionne, sinon elle ne fonctionne pas.
Veuillez m'aider. Je suis en difficulté
Voila mon code:
char *seq;
char *name;
char *id;
char *espece;
char simulationn[];
char inhibitionn[];
..............
char query[3000];
sprintf(query,"INSERT INTO pro (`id`, `nom`,`espece`, `sequence`,`simulation`,`inhibition`) VALUES ('%s','%s','%s','%s','%s','%s');",id,name,espece,seq,simulationn,inhibitionn);
Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention. Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé. Pour plus d'informations, nous vous invitons à lire les règles générales du forum
Merci de colorer votre code à l'aide du bouton Code
Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: cpp;">Votre code ici</pre>.
Utilises le bouton code </> du forum pour poster ton code ! (tu peux modifier ton post, lien modifier en haut à droite du post).
marwamokni1 a écrit:
Lorsque je mets char truc[], parce que le taille de la chaîne n'est pas connu. Il un traitement qui sera effectué qui rempli par la suite la chaine de caractère.
Et oui, mais c'est pas comme cela que ça marche ! Parce que tu ne peux rien mettre dans un tableau qui n'a pas de dimension !
Normalement, tu devrais avoir une erreur, car ce n'est pas permit.
2) J'ai bien compris, mais tu ne peux pas faire cela, il te faut une taille pour ton tableau, alors donne lui une taille suffisamment grande pour contenir ta chaîne !
Est-ce que tu connais à l'avance la taille maximale possible qu'aura la chaîne de caractères ? Par exemple si ce sont des mots du dictionnaire, on met la taille de « anticonstitutionnellement ».
(....) Lorsque j'ajoute une taille, la requête est bien remplie mais une erreur sql apparaît.
Alors, ce n'est plus un problème de C. Mais il y a pas mal de gens qui connaissent sql. Tu auras peut-être un réponse .... en donnant l'erreur sql retournée.
- Edité par edgarjacobs 28 juin 2022 à 19:42:58
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
parce que dans ce cas précis, la déclaration est équivalente à celle d'un pointeur
void afficher(char *message)
ce qui est une bizarrerie historique du langage C.
Dans ton message rien ne le laissait deviner (et là je suis obligé d'induire un contexte dans lequel tu peux avoir raison de dire "je n'ai pas d'erreur", en supposant en plus que tu parles de la compilation du source.
Si tu montrais ton code en entier, ça éviterait de perdre du temps à tout le monde, nous à te signaler des trucs bizarres, et toi à partir sur des fausses pistes.
N'utilise pas sprintf pour faire des requêtes SQL, c'est la porte ouvertes aux injections. Utilise la vraie API du SGBD en question (et en général ils offrent des prepared statements).
> Le caractère délimiteur utilisé est l'accent grave ` (AltGr-7 sur nos claviers français) et pas l'apostrophe.
Dans les VALUES, il s'agit bien d'apostrophes
printf(query, "INSERT INTO pro (`id`, `nom`,`espece`, `sequence`,`simulation`,`inhibition`)"
"VALUES ('%s','%s','%s','%s','%s','%s');", // <--- ici
> Comme le montre l'exemple, c'est une grosse galère à utiliser en C :-)
Mais quel idée de vouloir utiliser C pour un programme qui accède à une base de données, et aura donc vraisemblablement besoin de chaînes de caractères, qui n'existent pas vraiment en C. Ca et l'UTF-8...
Mais quel idée de vouloir utiliser C pour un programme qui accède à une base de données, et aura donc vraisemblablement besoin de chaînes de caractères, qui n'existent pas vraiment en C. Ca et l'UTF-8...
Est-ce réservé à un langage précis alors ?
Je vois pas où est le soucis des chaînes de caractères, à part si l'OP les fabrique caractère par caractère tout est transparent. S'il utilise par exemple, fgets pour récupérer une chaine de son terminal et que son environnement est en UTF-8, alors en base il y aura une chaîne en UTF-8. En réalité pour être UTF-8 friendly il y a pas grand chose à faire.
git is great because Linus did it, mercurial is better because he didn't.
> à part si l'OP les fabrique caractère par caractère tout est transparent.
Hélas, il faut leur réserver explicitement une taille. et bien sûr vérifier partout qu'on ne tente jamais de la dépasser. Et prendre les mesures préventives au cas où. Emmerdements en cascade.
> En réalité pour être UTF-8 friendly il y a pas grand chose à faire.
Exemple, passer une chaine UTF-8 en majuscules, genre "Nguyễn Tất Thành"en "trimmant" les espaces au bout et supprimant ceux qui sont en doublon ? C'est pas impossible en C, c'est juste hyper-pénible.
- Edité par michelbillaud 30 juin 2022 à 8:55:30
Insert into with sprintf
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
git is great because Linus did it, mercurial is better because he didn't.
git is great because Linus did it, mercurial is better because he didn't.