Cita: mysqli::real_escape_string
mysqli_real_escape_string
(PHP 5)
mysqli::real_escape_string -- mysqli_real_escape_string — Escapa los caracteres especiales de una cadena para usarla en una sentencia SQL, tomando en cuenta el conjunto de caracteres actual de la conexión
Cita:
mysqli_stmt::bind_param
mysqli_stmt_bind_param
(PHP 5)
mysqli_stmt::bind_param -- mysqli_stmt_bind_param — Agrega variables a una sentencia preparada como parámetros
Francamente me parece algo difícil de confundir. Son cosas
completamente diferentes. No tienen relación directa.
La primera se usa para manipular cadenas de texto, mientras que la segunda se usa para sentencias preparadas.
Obviamente, la primera afecta al contenido del parámetro (valor de variables a usar), pero solamente al contenedor de la cadena a escapar. No al objeto de parámetro, porque la función de ese objeto es transferir el dato como parámetro.
Yendo al ejemplo del manual de referencia, la primera sería:
Código PHP:
Ver original<?php
$mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "world");
/* verificar la conexión */
}
$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();
?>
Y la segunda:
Código PHP:
Ver original<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
/* verificar conexión */
}
$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent);
$code = 'DEU';
$language = 'Bavarian';
$official = "F";
$percent = 11.2;
/* ejecuta sentencias prepradas */
$stmt->execute();
printf("%d Fila insertada.\n", $stmt->affected_rows);
/* cierra sentencia y conexión */
$stmt->close();
/* Limpia la tabla CountryLanguage */
$mysqli->query("DELETE FROM CountryLanguage WHERE Language='Bavarian'");
printf("%d Fila borrada.\n", $mysqli->affected_rows);
/* cierra la conexión */
$mysqli->close();
?>
¿Exactamente cuál es tu duda?