210 votes

Comment échapper correctement à un seul devis pour une base de données SQLite?

Je suis en train de créer une nouvelle base de données SQLite à partir de zéro par écrit le schéma de mes nouvelles tables (le seul à ce jour), et les instructions INSERT pour tableau dans un fichier.

Puis-je aller dans sqlite3 et essayer de créer la base de données comme suit:

$ sqlite3 newdatabase.db
SQLite version 3.4.0
Enter ".help" for instructions
sqlite> .read ./schema.sql
SQL error near line 16: near "s": syntax error

La ligne 16 de mon fichier ressemble à ceci:

INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there\'s');

Donc, le problème, c'est le caractère d'échappement pour une seule citation, mais je ne peux pas comprendre pourquoi cela ne fonctionne pas. J'ai déjà essayé le double échapper l'apostrophe (à l'aide de \\' au lieu de \"), mais qui ne fonctionne pas non plus.

Ce que je fais mal?

339voto

Ryan Guill Points 6115

Essayez de doubler les guillemets simples. De nombreuses bases de données attendre d'elle de cette façon. De sorte qu'il serait

INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there''s');

Edit: étant donné que cette question semble obtenir beaucoup de trafic, voici quelques liens utiles.

Documentation: http://www.sqlite.org/lang_expr.html

Citation de la documentation:

Une constante de chaîne est formée en joignant la chaîne de caractères entre guillemets simples ('). Une offre unique au sein de la chaîne peut être codé en mettant les deux guillemets simples dans une rangée - comme en Pascal. C-style s'échappe à l'aide de la barre oblique ne sont pas pris en charge car ils ne sont pas la norme SQL. BLOB littéraux sont des littéraux de chaîne contenant des données hexadécimales et précédé par un seul "x" ou "X" de caractère. ... Une valeur littérale peut également être le jeton de la valeur "NULL".

47voto

overslacked Points 3033

Je crois que vous voudriez vous échapper en doublant la citation unique:

 INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there''s');
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X