Foros del Web » Programando para Internet » PHP »

diferencia entre real_escape_string y bind_param

Estas en el tema de diferencia entre real_escape_string y bind_param en el foro de PHP en Foros del Web. Buenas, Que diferencia hay entre mysqli::real_escape_string y mysqli_stmt_bind_param?? Si utilizo mysqli::real_escape_string debo utlizar antes mysqli::set_charset?? Un saludo...
  #1 (permalink)  
Antiguo 10/12/2012, 10:01
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
diferencia entre real_escape_string y bind_param

Buenas,

Que diferencia hay entre mysqli::real_escape_string y mysqli_stmt_bind_param??

Si utilizo mysqli::real_escape_string debo utlizar antes mysqli::set_charset??

Un saludo
  #2 (permalink)  
Antiguo 10/12/2012, 14:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: diferencia entre real_escape_string y bind_param

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
  1. <?php
  2. $mysqli = new mysqli("localhost", "mi_usuario", "mi_contraseña", "world");
  3.  
  4. /* verificar la conexión */
  5.     printf("Falló la conexión: %s\n", mysqli_connect_error());
  6.     exit();
  7. }
  8.  
  9. $mysqli->query("CREATE TEMPORARY TABLE miCiudad LIKE City");
  10.  
  11. $ciudad = "'s Hertogenbosch";
  12.  
  13. /* esta consulta fallará debido a que no escapa $ciudad */
  14. if (!$mysqli->query("INSERT into miCiudad (Name) VALUES ('$ciudad')")) {
  15.     printf("Error: %s\n", $mysqli->sqlstate);
  16. }
  17.  
  18. $ciudad = $mysqli->real_escape_string($ciudad);
  19.  
  20. /* esta consulta con $ciudad escapada funcionará */
  21. if ($mysqli->query("INSERT into miCiudad (Name) VALUES ('$ciudad')")) {
  22.     printf("%d fila insertada.\n", $mysqli->affected_rows);
  23. }
  24.  
  25. $mysqli->close();
  26. ?>
Y la segunda:
Código PHP:
Ver original
  1. <?php
  2. $mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');
  3.  
  4. /* verificar conexión */
  5.     printf("Error de conexión: %s\n", mysqli_connect_error());
  6.     exit();
  7. }
  8.  
  9. $stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
  10. $stmt->bind_param('sssd', $code, $language, $official, $percent);
  11.  
  12. $code = 'DEU';
  13. $language = 'Bavarian';
  14. $official = "F";
  15. $percent = 11.2;
  16.  
  17. /* ejecuta sentencias prepradas */
  18. $stmt->execute();
  19.  
  20. printf("%d Fila insertada.\n", $stmt->affected_rows);
  21.  
  22. /* cierra sentencia y conexión */
  23. $stmt->close();
  24.  
  25. /* Limpia la tabla CountryLanguage */
  26. $mysqli->query("DELETE FROM CountryLanguage WHERE Language='Bavarian'");
  27. printf("%d Fila borrada.\n", $mysqli->affected_rows);
  28.  
  29. /* cierra la conexión */
  30. $mysqli->close();
  31. ?>
¿Exactamente cuál es tu duda?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: diferencia, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:52.