Question

J'utilise mysql_real_escape_string pour échapper à une chaîne avant de l'insérer dans ma base de données MySQL.

va bien tout fonctionne, sauf que le personnage est manqué et se transforme en ’ par MySQL.

Que puis-je faire pour résoudre le problème? Dois-je utiliser une meilleure fonction pour échapper à la chaîne?

Je suis aussi inquiet que d'autres pourraient être charachters se manquer et être de la même transformé en un non-sens!

S'il vous plaît aider!

Merci:)

Était-ce utile?

La solution

Le caractère » ne reçoit pas manqué, il est tout simplement un caractère non utilisé par MySQL pour les chaînes enrobant, et n'a pas besoin d'être échappé.

La raison pour laquelle il se transforme en cette chaîne est étrange parce qu'il est un caractère multi-octets, et vous mettez dans un seul champ d'octets.

Autres conseils

Vous devez utiliser les commandes préparées avec des variables liées au lieu: http: // php .net / manuel / fr / pdo.prepared-statements.php de cette façon, vous n'avez pas à vous soucier de quoi que ce soit échapper. Les avantages sont mentionnés dans la documentation que je lié.

mysql_real_escape_string () échappe simplement une poignée de personnages (à l'aide de \) pour les rendre « sûr » fourrer dans votre requête. Vous semblez avoir un décalage d'encodage avec vos données (la citation Styled) et votre colonne type de codage. mysql_real_escape_string ne résoudra jamais ce genre de question.

Est-ce une citation de fantaisie? Si oui, il ressemble probablement du charabia dans votre base de données en raison de différences de caractères d'encodage. Chaque table a un caractère associé le codage et la connexion a son propre encodage.

Essayez d'exécuter "SET NAMES utf8" avant votre requête. Cela définir l'encodage de la connexion en UTF-8. Bien sûr, si vous essayez de stocker caractères UTF-8 dans, disons une table latin1, vous toujours pas obtenir le résultat que vous attendez.

C'est un caractère spécial pour cela, vous devez utiliser l'encodage UTF

Placez cette ligne en haut de la page où vous insérez les données dans la base de données

header ('Content-type: text/html; charset=utf-8');

Hope cela fonctionne

Il fonctionnera dans le cas où vous avez établi la connexion avec MySQL: mysql_query ( "SET NOMS UTF8 '");

En d'autres termes, si SET NAMES 'utf8' n'est pas réglé, utf8_encode est pas nécessaire.

Que serait même mieux est d'utiliser PDO au lieu de MySQL standard.

http://www.php.net/manual/en/class. pdo.php

mysql_real_escape_string(utf8_encode($data));

Espérons que cela fonctionnera.

<?php
    if(isset($_GET['submit']))
    {
        mysql_connect('localhost','root','');
        mysql_select_db('test');
        $var=mysql_real_escape_string($_GET['asd']);
        $sql="INSERT INTO `test`.`asd` (`id` ,`name` ,`desc`)VALUES ('', '$var', 'knkk');";
        echo $sql."<br />";
        $res=mysql_query($sql) or die('error');
        echo $res;
    }
?>

<html>
<body>
    <form name="f1" method="get">
        <input type="text" name="asd">
        <input type="submit" name="submit">
    </form>
</body>
</html>

Sortie:

INSERT INTO test.asd (id, name, desc) VALUES ( '', 'asd \' LGH », 'knkk');

1

entrer image description ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top