mysql_real_escape_string
En esta página
mysql_real_escape_string
Escapa caracteres especiales en una cadena para su uso en una sentencia SQL
[!WARNING] Esta extensión estaba obsoleta en PHP 5.5.0, y fue eliminada en PHP 7.0.0. En su lugar, se puede utilizar la extensión MySQLi o la extensión PDO_MySQL. Ver también MySQL: elegir una API de la guía. Alternativas a esta función:
mysqli_real_escape_string
PDO::quote
Descripción#
mysql_real_escape_string(string $unescaped_string, [resource $link_identifier]): string
```php
Escapa caracteres especiales en la cadena dada por `unescaped_string`, teniendo en cuenta el conjunto de caracteres en uso de la conexión, para que sea seguro usarla en `mysql_query`. Si se van a insertar datos binarios, se ha de usar esta función.
`mysql_real_escape_string` llama a la función mysql_real_escape_string de la biblioteca de MySQL, la cual antepone barras invertidas a los siguientes caracteres: `\x00`, `\n`, `\r`, `\`, `'`, `"` y `\x1a`.
Esta función siempre debe usarse (con pocas excepciones) para hacer seguros los datos antes de enviar una consulta a MySQL.
> [!CAUTION]
> El conjunto de caracteres debe ser establecido o bien a nivel del servidor, o bien con la función `mysql_set_charset` de la API para que afecte a `mysql_real_escape_string`. Véase la sección sobre los conceptos de [conjuntos de caracters](#mysqlinfo.concepts.charset) para más información.
## Parámetros
`unescaped_string`
La cadena a escapar.
`link_identifier`
La conexión MySQL. Si no se especifica, se utilizará la última conexión abierta con la función `mysql_connect`. Si no se encuentra una conexión de este tipo, la función intentará abrir una conexión, como si la función `mysql_connect` hubiera sido llamada sin argumento. Si no se encuentra o establece una conexión, se generará una alerta de nivel `E_WARNING`.
## Valores devueltos
Devuelve la cadena escapada, o `false` en caso de error.
## Errores/Excepciones
Ejecutar esta función sin una conexión de MySQL presente también emitirá errores de nivel `E_WARNING` de PHP. Solo se ha de ejecutar con una conexión de MySQL válida presente.
## Ejemplos
Ejemplo sencillo de `mysql_real_escape_string`
`mysql_real_escape_string` requiere una conexión
Este ejemplo muestra lo que sucede si no hay presente una conexión de MySQL al invocar a esta función.
Resultado del ejemplo anterior es similar a:
Warning: mysql_real_escape_string(): No such file or directory in /this/test/script.php on line 5
Warning: mysql_real_escape_string(): A link to the server could not be established in /this/test/script.php on line 5
bool(false)
string(41) "SELECT * FROM actors WHERE last_name = ''"
Un ejemplo de ataque de inyección de SQL
```php
La consulta enviada a MySQL:
SELECT * FROM users WHERE user='aidan' AND password='' OR ''=''
Esto permitiría a alguien acceder a una sesión sin una contraseña válida.
Notas#
[!NOTE] Se requiere una conexión a MySQL antes de usar
mysql_real_escape_string, si no, se generará un error de nivelE_WARNING, y se devolveráfalse. Silink_identifierno está definido, se usará la última conexión a MySQL.[!NOTE] Si esta función no se utiliza para escapar los datos, la consulta es vulnerable a Ataques de inyección SQL.
[!NOTE]
mysql_real_escape_stringno escapa%ni_. Estos son comodines en MySQL si se combinan conLIKE,GRANT, oREVOKE.
Véase también#
mysql_set_charset
mysql_client_encoding