Вопрос

Я использую mysql_real_escape_string для экранирования строки перед вставкой ее в мою базу данных mysql.

Все работает нормально, за исключением того, что персонаж упускается из виду и превращается в ’ с помощью mysql.

Что я могу сделать, чтобы решить проблему?Должен ли я использовать лучшую функцию для экранирования строки?

Я также обеспокоен тем, что другие персонажи могут быть пропущены и точно так же превращены в бессмыслицу!

Пожалуйста, помогите!

Спасибо :)

Это было полезно?

Решение

Персонаж «не пропускается, это просто персонаж, который не используется MySQL для инканализации строк, и его не нужно избежать.

Причина, по которой он превращается в эту странную струну, заключается в том, что это многобайтный символ, и вы помещаете ее в одно байтовое поле.

Другие советы

Вместо этого вы должны использовать подготовленные операторы с переменными привязки: http://php.net/manual/en/pdo.prepared-statements.php Таким образом, вам не нужно беспокоиться о том, чтобы избежать чего -либо. Преимущества упоминаются в документации, с которой я связан.

mysql_real_escape_string() просто экранирует несколько символов (используя \'s), чтобы сделать их "безопасными" для включения в ваш запрос.Похоже, у вас несоответствие кодировки вашим данным (стилизованная кавычка) и типу кодировки вашего столбца.mysql_real_escape_string никогда не решит проблему такого рода.

Это причудливая цитата? Если это так, то это, вероятно, выглядит как тампы в вашей базе данных из -за различий кодирования персонажа. Каждая таблица имеет связанный кодирование символов, а соединение имеет свою собственную кодировку.

Попробуйте выполнить «Установить имена UTF8» перед запросом. Это установит кодирование соединения с UTF-8. Конечно, если вы пытаетесь хранить символы UTF-8, скажем, таблица Latin1, вы все равно не получите ожидаемый результат.

Это особый персонаж для этого, вам нужно использовать кодирование UTF

Поместите эту строку в верхней части страницы, где вы вставляете данные в базу данных

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

Надеюсь, что это работает

Это будет работать в случае, если вы установили соединение MySQL с: mysql_query («Установить имена UTF8 '»);

Другими словами, если Установить имена 'UTF8' не установлен, UTF8_Encode не нужен.

Что было бы лучше, так это использовать PDO вместо стандартного MySQL.

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

mysql_real_escape_string(utf8_encode($data));

Надеюсь, это сработает.

<?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>

Выход:

Вставить в test.asd (id ,name ,desc) Значения ('', 'asd ' lgh ',' knkk ');

1

enter image description here

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top