Foros del Web » Programando para Internet » PHP »

Escapar cadena antes de INSERT

Estas en el tema de Escapar cadena antes de INSERT en el foro de PHP en Foros del Web. Hola, ando un poco perdido. Tengo un texto que quiero insertar en una base de datos. En ese texto pueden aparecer comillas simples y dobles ...
  #1 (permalink)  
Antiguo 15/07/2012, 06:30
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años, 7 meses
Puntos: 15
Escapar cadena antes de INSERT

Hola, ando un poco perdido.

Tengo un texto que quiero insertar en una base de datos. En ese texto pueden aparecer comillas simples y dobles y todo tipo de caracteres especiales. He estado leyendo las diferentes funciones de PHP para escapar los caracteres pero no me queda claro cuál usar:

- mysql_real_escape_string
- mysqli_real_escape_string
- mysql_escape_string
- mysqli_escape_string
- htmlspecialchars
- addslashes

  #2 (permalink)  
Antiguo 19/07/2012, 00:40
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Escapar cadena antes de INSERT

si es para una consulta mysql_real_escape_string el mismo nombre lo dice , aunque tambien puedes escapar antes de la consulta con htmlspecialchars y ya despues mysql_real_escape_string
  #3 (permalink)  
Antiguo 19/07/2012, 02:55
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años, 7 meses
Puntos: 15
Respuesta: Escapar cadena antes de INSERT

No es para una consulta realmente.

Lo que tengo que hacer es preparar primero el campo (escaparlo) para después, una vez ya escapado, hacer un INSERT y meterlo en la base de datos.

Cuál sería la función más adecuada a utilizar?

Graciasss
  #4 (permalink)  
Antiguo 19/07/2012, 10:24
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Escapar cadena antes de INSERT

usa strip_tags o htmlentities o htmlspecialchars tambien es segun que variable y que deseas escapar y despues en la consulta ya usas mysql_real_escape_string y si quieres lo combinas con addslashes o stripslashes
  #5 (permalink)  
Antiguo 19/07/2012, 14:41
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años, 7 meses
Puntos: 15
Respuesta: Escapar cadena antes de INSERT

ya uso strip_tags pero eso es para quitar las tags html, lo que quiero es escapar caracteres especiales antes del INSERT, como por ejemplo las comillas simples o dobles. aún sigo dudando qué es mejor.
  #6 (permalink)  
Antiguo 19/07/2012, 14:44
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años, 6 meses
Puntos: 76
Respuesta: Escapar cadena antes de INSERT

hola

te refieres a algo asi:

Código PHP:
Ver original
  1. $cadena = "valor='web'";
  2. $patt = "/[\"\']/";
  3.  
  4. echo $valida = preg_replace($patt,"",$cadena);
  #7 (permalink)  
Antiguo 19/07/2012, 14:50
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Escapar cadena antes de INSERT

haber paso a paso

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.
mysql_real_escape_string — Escapa caracteres especiales en un string para su uso en una sentencia SQL

http://php.net/manual/es/function.my...ape-string.php


stripslashes — Quita las barras de un string con comillas escapadas
Devuelve un string con las barras invertidas retiradas. (\' se convierte en ' y así sucesivamente.) Barras invertidas dobles (\\) se convierten en una sencilla (\).

http://es.php.net/manual/es/function.stripslashes.php


addslashes — Añade barras invertidas a una cadena
Devuelve una cadena con barras invertidas delante de los carácteres que necesitan escaparse en situaciones como consultas de bases de datos, etc. Los carácteres que se escapan son la comilla simple ('), comilla doble ("), barra invertida (\) y NUL (el byte NULL).

http://es.php.net/manual/es/function.addslashes.php


strip_tags — Retira las etiquetas HTML y PHP de un string
http://es.php.net/manual/es/function.strip-tags.php


htmlentities — Convierte todos los caracteres aplicables a entidades HTML
http://es.php.net/manual/es/function.htmlentities.php


htmlspecialchars — Convierte caracteres especiales en entidades HTML

'&' (et) se convierte en '&'
'"' (comillas dobles) se convierte en '"' cuando ENT_NOQUOTES no está establecido.
"'" (comilla simple) se convierte en ''' (o ') sólo cuando ENT_QUOTES está establecido.
'<' (menor que) se convierte en '&lt;'
'>' (mayor que) se convierte en '&gt;'
http://es.php.net/manual/es/function...ecialchars.php

Última edición por webankenovi; 19/07/2012 a las 15:00
  #8 (permalink)  
Antiguo 19/07/2012, 16:16
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años, 7 meses
Puntos: 15
Respuesta: Escapar cadena antes de INSERT

Muchas gracias, las explicaciones son muy buenas y detalladas pero... el tema es que no sé cuál es la mejor.

Es decir tengo un texto con <b> <font size...>, ' " ¿ ? & y demás "fauna" de caracteres. Los tengo que convertir en "texto normal" (plano o no) o algo parecido para insertarlo en la base de datos y después mostrarlo.

No quiero almacenar tags html por lo que tengo claro que necesito hacer strip_tags pero... luego? Necesito convertir ese texto (que puede tener comillas simples, dobles, ?¿, !, @, &, ñ... cualquier cosa) en algo que pueda meter en la base de datos y luego sacar y mostrarlo sin problema.

Qué función podría ser la más efectiva?

$mitexto=strip_tags($mitexto); // esto es seguro

$mitexto=WHAT_FUNCTION($mitexto); // esto es lo que necesito

INSERT .... $mitexto........

y luego claro:

SELECT... $mitexto....
  #9 (permalink)  
Antiguo 19/07/2012, 16:29
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Escapar cadena antes de INSERT

vale haber entonces suponiendo que quieres introducir algo asi

$STRING = '<b> "HOLA MUNDO" </b>'; // muestra <b>"hol@ mundo"</b> codigo fuente
$STRING = htmlspecialchars('<b>"hol@ mundo"</b>',ENT_QUOTES); // muestra &lt;b&gt;&quot;hol@ mundo&quot;&lt;/b&gt; codigo fuente

entonces ya lo guardamos en la bd haciendo antes un mysql_real_escape_string

y a la hora de mostrarlo nuevamente traido de la bd

$STRING = htmlspecialchars_decode($campo_de_la_bd,ENT_QUOTES ); // muestra nuevamente <b>"hol@ mundo"</b>

espero te sriva
  #10 (permalink)  
Antiguo 20/07/2012, 01:12
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años, 7 meses
Puntos: 15
Respuesta: Escapar cadena antes de INSERT

Creo que no nos entendemos aún al 100% ;)

Tengo esto:

Código PHP:
Ver original
  1. $STRING = '<b> "HOLA MUNDO" </b>';

hago esto (esto seguro que lo hago):


Código PHP:
Ver original
  1. $STRING=strip_tags($STRING);


Ahora que tengo el string sin etiquetas HTML, tengo que escapar las comillas y resto de caracteres raros con alguna función:


$mitexto=WHAT_FUNCTION($mitexto); // esto es lo que necesito


Luego hago el insert:


INSERT .... $mitexto........


y luego claro, lo saco:


SELECT... $mitexto....
  #11 (permalink)  
Antiguo 20/07/2012, 10:56
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Escapar cadena antes de INSERT

$mitexto=WHAT_FUNCTION($mitexto); // esto es lo que necesito

crea la funcion tu mismo
  #12 (permalink)  
Antiguo 20/07/2012, 11:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Escapar cadena antes de INSERT

Usa mejor PDO y PreparedStatements así te olvidas de las comillas
  #13 (permalink)  
Antiguo 21/07/2012, 02:48
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años, 7 meses
Puntos: 15
Respuesta: Escapar cadena antes de INSERT

Lo de WHAT_FUNCTION me refiero a qué función debería usar de PHP para que me escapar comillas y demás caracteres "raros".

Por ahora he empezado a usar mysql_real_escape_string pero no estoy seguro de estar haciéndolo bien.

Veo que hay muchas opciones y me imagino que dependerá de múltiples situaciones el uso de unas u otras porque aún no está claro cuál he de usar.

Lo de PDO y PreparedStatements, he estado mirando y se me escapa un poco a mis limitados conocimientos.

De todas formas gracias!
  #14 (permalink)  
Antiguo 21/07/2012, 12:32
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Escapar cadena antes de INSERT

Es sencillo usar PDO:
Código PHP:
Ver original
  1. <?php
  2. $dsn = 'mysql:dbname=testdb;host=127.0.0.1';
  3. $user = 'dbuser';
  4. $password = 'dbpass';
  5.  
  6. try {
  7.     $dbh = new PDO($dsn, $user, $password);
  8. } catch (PDOException $e) {
  9.     echo 'Connection failed: ' . $e->getMessage();
  10. }
  11.  
  12. $nombre = $_GET['nombre'];
  13. $sth = $dbh->prepare('SELECT * FROM personas WHERE name = ?');
  14. $sth->execute(array($nombre));
  15. foreach ($sth->fetchAll() as $row) {
  16.     var_dump($row);
  17. }

Etiquetas: escapar, html, insert, mysql, cadenas
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 05:57.