web-dev-qa-db-fra.com

Comment insérer des caractères spéciaux dans une base de données?

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

Je peux très bien insérer les caractères spéciaux avec PHPmyAdmin, mais cela ne fonctionne tout simplement pas avec PHP. Se pourrait-il que PHP modifie les caractères spéciaux en autre chose? Si tel est le cas, existe-t-il un moyen de les insérer correctement? 

17
Joey Morani
$insert_data = mysql_real_escape_string($input_data);

En supposant que les données soient stockées sous le nom $input_data

28
Anthony

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

9
zaf

utilisez mysql_real_escape_string

Alors, que fait mysql_real_escape_string?

Cette fonction de bibliothèque PHP ajoute des barres obliques inverses aux caractères suivants:\n,\r, \,\x00,\x1a, ‘et“. L'important est que les guillemets simples et doubles soient protégés, car ce sont les caractères les plus susceptibles d'ouvrir des vulnérabilités.

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

6
Peter Parker

Vous échapperez probablement la chaîne SQL, semblable à:

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

Vous devez échapper aux guillemets, comme suit:

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

mysql_real_escape_string() le gère pour vous.

5
Paul Lammertsma

Vous les collez probablement directement dans une requête. Avant de les "échapper", utilisez la fonction appropriée - mysql_real_escape_string , mysqli_real_escape_string ou PDO :: quote en fonction de l’extension utilisée.

5

Notez que, comme d'autres l'ont déjà souligné, mysql_real_escape_string () résoudra le problème (de même que des barres obliques), cependant vous devriez toujours utiliser mysql_real_escape_string () pour des raisons de sécurité - considérez:

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

Et 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'est-à-dire que les contrôles de sécurité sont complètement ignorés.

C.

3
symcbean

Probablement "mysql_real_escape_string()" fonctionnera pour u

2
OM The Eternity

fonction htmlspecialchars est la meilleure solution boursiers. Aujourd'hui, je cherchais comment insérer des chaînes avec des caractères spéciaux et le google jeté autant de listes Stackoverflow. Aucune d'entre elles ne m'a fourni de solution. Je l'ai trouvé dans la page w3schools. Oui, je pourrais résoudre mon problème en utilisant cette fonction comme ceci:

$abc = $POST['xyz'];

$abc = htmlspecialchars($abc);
0
Solomon Sudhir

Par exemple:  
$ parent_category_name = Vêtements pour hommes
Considérons ici la requête SQL

$sql_category_name = "SELECT c.*, cd.name, cd.category_id  as iid FROM ". DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = '" .  $this->db->escape($parent_category_name) . "' AND c.parent_id =0 "; 

Erreur:

Static analysis:

1 errors were found during analysis.

Ending quote ' was expected. (near "" at position 198)
SQL query: Documentation

SELECT c.*, cd.name, cd.category_id as iid FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = 'Men's Clothing' AND c.parent_id =0 LIMIT 0, 25

MySQL said: Documentation

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Clothing' AND c.parent_id =0 LIMIT 0, 25' at line 1

Essayez de mettre en œuvre:

$this->db->escape($parent_category_name)

La méthode ci-dessus fonctionne sur le framework OpenCart. Trouvez votre framework et implémentez OR mysql_real_escape_string() dans Core PHP

Cela deviendra le vêtement pour hommes c’est-à-dire, dans mon cas

$sql_category_name = "SELECT c.*, cd.name, cd.category_id  as iid FROM ". DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = '" .  $this->db->escape($parent_category_name) . "' AND c.parent_id =0 "; 

Ainsi, vous obtiendrez une image claire de la requête en implémentant escape () en tant que

SELECT c.*, cd.name, cd.category_id as iid FROM oc_category c LEFT JOIN oc_category_description cd ON (c.category_id = cd.category_id) WHERE cd.name = 'Men\'s Clothing' AND c.parent_id =0
0
Nishanth ॐ

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

Assez seulement. Ceci pour caractère spécial:

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

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