downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

mysqli::real_query> <mysqli::real_connect
[edit] Last updated: Fri, 24 May 2013

view this page in

mysqli::real_escape_string

mysqli_real_escape_string

(PHP 5)

mysqli::real_escape_string -- mysqli_real_escape_stringEscapa los caracteres especiales de una cadena para usarla en una sentencia SQL, tomando en cuenta el conjunto de caracteres actual de la conexión

Descripción

Estilo orientado a objetos

string mysqli::escape_string ( string $escapestr )
string mysqli::real_escape_string ( string $escapestr )

Estilo por procedimientos

string mysqli_real_escape_string ( mysqli $link , string $escapestr )

Esta función se usa para crear una cadena SQL legal que se puede usar en una sentencia SQL. La cadena dada es codificada a una cadena SQL escapada, tomando en cuenta el conjunto de caracters actual de la conexión.

Precaución

Seguridad: el conjunto de caracteres predeterminado

El conjunto de caracteres debe ser establecido a nivel del servidor, o con la función mysqli_set_charset() de la API para que afecte a mysqli_real_escape_string(). Véase la sección de conceptos sobre conjuntos de caracteres para más información.

Parámetros

link

Sólo estilo por procediminetos: Un identificador de enlace devuelto por mysqli_connect() o mysqli_init()

escapestr

La cadena a escapar.

Los caracters codifcados son NUL (ASCII 0), \n, \r, \, ', ", y Control-Z.

Valores devueltos

Devuelve una cadena escapada.

Ejemplos

Ejemplo #1 Ejemplo de mysqli::real_escape_string()

Estilo orientado a objetos

<?php
$mysqli 
= new mysqli("localhost""mi_usuario""mi_contraseña""world");

/* verificar la conexión */
if (mysqli_connect_errno()) {
    
printf("Falló la conexión: %s\n"mysqli_connect_error());
    exit();
}

$mysqli->query("CREATE TEMPORARY TABLE miCiudad LIKE City");

$ciudad "'s Hertogenbosch";

/* esta consulta fallará debido a que no escapa $ciudad */
if (!$mysqli->query("INSERT into miCiudad (Name) VALUES ('$ciudad')")) {
    
printf("Error: %s\n"$mysqli->sqlstate);
}

$ciudad $mysqli->real_escape_string($ciudad);

/* esta consulta con $ciudad escapada funcionará */
if ($mysqli->query("INSERT into miCiudad (Name) VALUES ('$ciudad')")) {
    
printf("%d fila insertada.\n"$mysqli->affected_rows);
}

$mysqli->close();
?>

Estilo por procedimientos

<?php
$enlace 
mysqli_connect("localhost""mi_usuario""mi_contraseña""world");

/* verificar la conexión */
if (mysqli_connect_errno()) {
    
printf("Falló la conexión: %s\n"mysqli_connect_error());
    exit();
}

mysqli_query($enlace"CREATE TEMPORARY TABLE miCiudad LIKE City");

$ciudad "'s Hertogenbosch";

/* esta consulta fallará debido a que no escapa $ciudad */
if (!mysqli_query($enlace"INSERT into miCiudad (Name) VALUES ('$ciudad')")) {
    
printf("Error: %s\n"mysqli_sqlstate($enlace));
}

$ciudad mysqli_real_escape_string($enlace$ciudad);

/* esta consulta con $ciudad escapada funcionará */
if (mysqli_query($enlace"INSERT into miCiudad (Name) VALUES ('$ciudad')")) {
    
printf("%d fila insertada.\n"mysqli_affected_rows($enlace));
}

mysqli_close($enlace);
?>

El resultado de los ejemplos serían:

Error: 42000
1 fila insertada.

Notas

Nota:

Para quienes estén acostumbrados a usar mysql_real_escape_string(), se ha de observar que el argumento de mysqli_real_escape_string() difiere de lo que espera mysql_real_escape_string(). El identificador enlace va primero en mysqli_real_escape_string(), mientras que la cadena a escapar va primero en mysql_real_escape_string().

Ver también



mysqli::real_query> <mysqli::real_connect
[edit] Last updated: Fri, 24 May 2013
 
add a note add a note User Contributed Notes mysqli::real_escape_string - [5 notes]
up
6
arnoud at procurios dot nl
8 years ago
Note that this function will NOT escape _ (underscore) and % (percent) signs, which have special meanings in LIKE clauses.

As far as I know there is no function to do this, so you have to escape them yourself by adding a backslash in front of them.
up
2
Josef Toman
3 years ago
For percent sign and underscore I use this:
<?php
$more_escaped
= addcslashes($escaped, '%_');
?>
up
6
tobias_demuth at web dot de
7 years ago
Note, that if no connection is open, mysqli_real_escape_string() will return an empty string!
up
2
dave at mausner.us
2 years ago
You can avoid all character escaping issues (on the PHP side) if you use prepare() and bind_param(), as an alternative to placing arbitrary string values in SQL statements.  This works because bound parameter values are NOT passed via the SQL statement syntax.
up
0
vita dot plachy at seznam dot cz
5 years ago
The above can be managed by the following function:

<?php
function search_escape($str, $char = '\\')
{
    return
ereg_replace('[%_]', $char . '\0', $str);
}
?>

 
show source | credits | stats | sitemap | contact | advertising | mirror sites