2010-04-06 10 views
13

Quelqu'un peut-il me dire comment insérer des caractères spéciaux dans une base de données MySQL? J'ai fait un script PHP qui est destiné à insérer des mots dans une base de données, bien que si le mot contient un 'alors il ne sera pas inséré.Comment insérer des caractères spéciaux dans une base de données?

Je peux insérer les caractères spéciaux lors de l'utilisation de PHPmyAdmin, mais cela ne fonctionne pas lorsque je les insère via PHP. Se pourrait-il que PHP change les caractères spéciaux en quelque chose d'autre? Si oui, y a-t-il un moyen de les faire insérer correctement?

+0

u peut coller uniquement la partie du code où la variable paarticular est traitée et inséré? –

Répondre

24
$insert_data = mysql_real_escape_string($input_data); 

En supposant que vous avez les données stockées sous forme $input_data

+0

Cela m'apprendra à ne pas écrire un simple exemple d'une ligne. – zaf

+0

Je sais! J'ai presque effacé ma réponse quand je t'ai vu me battre. – Anthony

+0

parfait ... a également sauvé ma journée maintenant. Merci! –

9

Vous échapper? Essayez la fonction mysql_real_escape_string() et elle gérera les caractères spéciaux.

+0

+1 pour m'avoir battu. J'ai trouvé que j'ai plus de votes quand j'utilise le backtick pour formater mon code en ligne, si cela aide. – Anthony

+1

Sympathie upvote depuis que vous avez répondu en premier, mais n'a pas donné d'exemple. Comme si c'était une question qui n'aurait pas pu être résolue plus rapidement en utilisant PHP.net – dscher

+0

@dscher Merci! S'il n'y avait que plus de gens comme vous! ;) – zaf

2

probablement "mysql_real_escape_string()" travaillera pour u

4

vous êtes le plus s'éloignaient probablement la chaîne SQL, similaire à:

SELECT * FROM `table` WHERE `column` = 'Here's a syntax error!' 

Vous devez échapper à des guillemets, comme suit:

SELECT * FROM `table` WHERE `column` = 'Here\'s a syntax error!' 

mysql_real_escape_string() gère cela pour vous.

6

utilisation mysql_real_escape_string

Alors qu'est-ce que mysql_real_escape_string faire?

Cette fonction de bibliothèque PHP ajoute des antislashs aux caractères suivants: \ n, \ r, \, \ x00, \ x1a, 'et ". La partie importante est que les guillemets simples et doubles sont échappés, car ce sont les caractères les plus susceptibles d'ouvrir des vulnérabilités.

Veuillez nous informer sur sql_injection. Vous pouvez utiliser ce link comme point de départ

+1

Encore un autre article stupide dont l'auteur n'a aucune idée. La même vieille histoire à propos des tableaux déroulants (bon pour effrayer les débutants, oui, mais ne fonctionne jamais), la même fonction stupideQuery qui s'occupe des citations magiques. Et pas un mot sur les valeurs non-chaîne, comme d'habitude. et la plus grande protestation de $ badWords jamais –

+0

ok, ce n'est pas le meilleur article, mais il devrait se familiariser avec les bases (je l'ai creusé à partir d'une recherche rapide google) Vous pouvez donner un lien vers un meilleur article si vous avez. –

+0

Eh bien j'en ai écrit, c'est la forme de SO réponse. http://stackoverflow.com/questions/2589820/is-it-necessary-to-use-mysql-real-escape-string-when-magic-quotes-gpc-is-on –

3

Notez que comme d'autres l'ont souligné mysql_real_escape_string() va résoudre le problème (tout comme addslashes), mais vous devriez toujours utiliser mysql_real_escape_string() pour des raisons de sécurité - considérer:

SELECT * FROM valid_users WHERE username='$user' AND password='$password' 

Que faire si le navigateur envoie

user="admin' OR (user=''" 
password="') AND ''='" 

La requête devient:

SELECT * FROM valid_users 
WHERE username='admin' OR (user='' AND password='') AND ''='' 

c.-à-d. Que les contrôles de sécurité sont complètement exclus.

C.

0
$var = mysql_real_escape_string("data & the base"); 
$result = mysql_query('SELECT * FROM php_bugs WHERE php_bugs_category like "%' .$var.'%"'); 
+0

Ceci est un exemple de travail pour gérer le caractères spéciaux en php mysql.vous pouvez remplacer & avec 'il va fonctionner bien –

+0

vous pouvez modifier votre réponse et ajouter le commentaire de clarification :-) – kleopatra

0

Utilisez ceci: htmlentities($_POST['field']);

juste assez. Ce caractère spécial pour:

utilisation pour CI htmlentities($this->input->post('control_name'));