mysql_real_escape_string и ' - PullRequest
       31

mysql_real_escape_string и '

9 голосов
/ 19 января 2011

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

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

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

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

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

Спасибо:)

Ответы [ 9 ]

16 голосов
/ 19 января 2011

Символ 'не пропускается, это просто символ, который не используется mysql для включения строк, и его не нужно экранировать.

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

4 голосов
/ 19 января 2011

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

2 голосов
/ 19 января 2011

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

1 голос
/ 19 января 2011

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

Попробуйте выполнить «SET NAMES utf8» перед вашим запросом. Это установит кодировку соединения в UTF-8. Конечно, если вы пытаетесь сохранить символы UTF-8, скажем, в таблице latin1, вы все равно не получите ожидаемого результата.

0 голосов
/ 27 марта 2017

Это будет работать, если вы установили соединение mysql с: mysql_query ("SET NAMES 'utf8'");

Другими словами, если SET NAMES 'utf8' не задано, utf8_encode не требуется.

0 голосов
/ 13 февраля 2013
<?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>

Выход:

INSERT INTO test. asd (id, name, desc) ЗНАЧЕНИЯ ('', 'asd \' lgh ',' knkk ');

1

enter image description here

0 голосов
/ 06 февраля 2011

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

0 голосов
/ 06 февраля 2011
mysql_real_escape_string(utf8_encode($data));

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

0 голосов
/ 03 февраля 2011

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

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

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

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

...