This article introduces the difference between using mysql_real_escape_string to sort and process user-submitted data and using three similar functions: addslashes and mysql_escape_string. Escaped data can be inserted directly into the database.
It is a good explanation of the difference between addslashes and mysql_real_escape_string. Although many domestic PHP coders still rely on addslashes to prevent SQL injection (including me), I still recommend that everyone strengthen checks to prevent SQL injection in Chinese. The problem with addslashes is that hackers can use 0xbf27 to replace single quotes, while addslashes only changes 0xbf27 to 0xbf5c27, which becomes a valid multi-byte character. 0xbf5c is still regarded as a single quote, so addslashes cannot successfully intercept.
Of course, addslashes is not useless. It is used for processing single-byte strings. For multi-byte characters, use mysql_real_escape_string.
In addition, for the example of get_magic_quotes_gpc in the PHP manual:
if (!get_magic_quotes_gpc()) {
$lastname = addslashes($_POST['lastname']);
} else {
$lastname = $_POST['lastname'];
}
It is best to check $_POST['lastname'] when magic_quotes_gpc is already open.
Let’s talk about the difference between the two functions mysql_real_escape_string and mysql_escape_string:
mysql_real_escape_string can only be used when (PHP 4 >= 4.3.0, PHP 5). Otherwise, you can only use mysql_escape_string. The difference between the two is:
mysql_real_escape_string takes into account the connection's current character set, while mysql_escape_string does not.
To summarize:
addslashes() is a forced addition;
mysql_real_escape_string() will determine the character set, but there are requirements for the PHP version;
mysql_escape_string does not consider the current character set of the connection.