mysql\_escape\_string vs mysql\_real\_escape\_string

<p>так что это то, о чем мы все должны знать, и я подумал, когда впервые увидел это ..</p><p>я знаю, что <code>mysql\_escape\_string</code> устарел с версии 5.3, но какова была фактическая разница в <code>mysql\_real\_escape\_string</code>.</p><p>я думал, что <code>mysql\_real\_escape\_string</code> точно такой же, как <code>mysql\_escape\_string</code>, за исключением <code>mysql\_real\_escape\_string</code>, который принимает второй аргумент для ресурса mysql.</p><p>так что тогда я подумал, что должно быть какое-то различие в том, как обрабатываются строки, потому что не было бы необходимости в двух функциях.</p><p>и тогда я подумал, что разница заключается исключительно в локали и кодировках символов. ?</p><p>кто-нибудь может прояснить это для меня?</p>

<p>разница в том, что <code>mysql\_escape\_string</code> просто обрабатывает строку как необработанные байты и добавляет экранирование там, где считает, что это уместно.</p><p><code>mysql\_real\_escape\_string</code>, с другой стороны, использует информацию о наборе символов, используемом для соединения mysql. это означает, что строка экранируется при правильной обработке многобайтовых символов; то есть, он не будет вставлять экранирующие символы в середине символа. вот почему вам нужно соединение для <code>mysql\_real\_escape\_string</code>; это необходимо для того, чтобы знать, как должна обрабатываться строка.</p><p>однако вместо побега лучше использовать параметризованные запросы из библиотеки mysqli; ранее были ошибки в подпрограмме побега, и возможно, что некоторые могут появиться снова. параметризовать запрос гораздо сложнее, так что менее вероятно, что вы можете быть скомпрометированы ошибкой mysql.</p>

<p><code>mysql\_escape\_string</code> не устарел от 5.3, но для 4.3.0 и выше. поэтому любой, использующий php версию выше/или 4.3.0, должен использовать <code>mysql\_real\_escape\_string</code>.</p><p>если вы используете <code>php < 4.3.0</code>, то сделайте свой <code>magic\_quotes\_gpc active</code> из php.ini, хотя рекомендуется его обновить, но если у вашего кода будут проблемы, чем убедитесь, что вы используете, то функции <code>magic\_quotes\_gpc</code> и <code>addslash</code> вместо <code>mysql\_escape\_string</code>.</p>

<p>ну ... вроде да. он принимает во внимание набор символов соединения mysql.</p><p> <a href="http://php.net/mysql\_escape\_string">http://php.net/mysql\_escape\_string</a> </p><blockquote> <p>эта функция идентична <code>mysql\_real\_escape\_string()</code>, за исключением того, что <code>mysql\_real\_escape\_string()</code> берет обработчик соединения и экранирует строку в соответствии с текущим набором символов. <code>mysql\_escape\_string()</code> не принимает аргумент подключения и не учитывает текущую настройку набора символов.</p> </blockquote>

<p>теперь обе эти функции устарели в</p><blockquote> <p>php 4> = 4.3.0 и php 5. они рекомендуют использовать расширение <code>pdo\_mysql</code></p> </blockquote>