Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Insertar registros con string con comillas

Estas en el tema de Insertar registros con string con comillas en el foro de Mysql en Foros del Web. Buenas, en una base de datos tengo que insertar nombres o descripciones que a veces tienen comillas simples u otro tipo de caracteres "raros" como ...
  #1 (permalink)  
Antiguo 17/03/2012, 05:52
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 14 años, 7 meses
Puntos: 15
Insertar registros con string con comillas

Buenas, en una base de datos tengo que insertar nombres o descripciones que a veces tienen comillas simples u otro tipo de caracteres "raros" como "?", acentos, etc.

Si no trato el campo, no me lo inserta, qué tengo qué hacer?

He estado viendo un poco por ahí y me encuentro con un mar de instrucciones php addslashes, mysql_real_escape_string, htmlspecialchars, htmlentities... pero no tengo claro cuál es la más idónea.
  #2 (permalink)  
Antiguo 20/03/2012, 11:18
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 12 años, 11 meses
Puntos: 447
Respuesta: Insertar registros con string con comillas

Hola humanista:

Hay que tener cuidado al distinguir sobre el tratamiento que tienes que hacer en MySQL para los caracteres especiales y el tratamiento que le dan los lenguajes de programación (como PHP), ya que son cosas distintas. Este es un foro de MySQL, por lo que voy a enfocarme en estos, tu pregunta está enfocada a PHP, por lo que es recomendable que la publiques en el foro de este lenguaje:

http://www.forosdelweb.com/f18/

Ahora si, entrando en materia. En MySQL los caracteres especiales a los que tienes que darle un tratamiento especial para manejarlos en campos tipo texto serían la comilla sencilla ('), la comilla doble(") y la diagonal invertida (\).
La comilla sencilla y la comilla doble se usa para delimitar cadenas por lo que será necesario "matarlas" para poder manejarla como caracter y no como separador.
Si utilizas comillas sencillas como delimitador PUEDES UTILIZAR COMILLAS DOBLES dentro de la cadena sin darle tratamiento, pero no la comilla sencilla.

De la misma manera, si utilizas la comilla doble como delimitador PUEDES UTILIZAR LAS COMILLAS SENCILLAS dentro de la cadena sin darle tratamiento, pero no la comilla doble.

La diagonal invertida siempre deberá tener un tratamiento especial

Para "matar" la comilla puedes hacerlo poniendo una doble comilla sencilla ('') o poniendo (\').

MUCHO OJO, ES DOBLE COMILLA SENCILLA, NO UNA COMILLA DOBLE.

Checa este script:

Código MySQL:
Ver original
  1. DROP TABLE tabla;
  2. CREATE TABLE tabla (campo VARCHAR(60));
  3. ('caracteres especiales: !"#$%&/()=?¿´+{}.-,;^`¨~'),
  4. ('diagonal invertida: \\'),
  5. ('comilla simple: \''),
  6. ('comilla simple: '''),
  7. ("comilla simple: '"),
  8. ("comilla doble: \""),
  9. ('comilla doble: "'),
  10. ("comilla doble: """);
  11.  
  12. mysql> select * from tabla;
  13. +-------------------------------------------------+
  14. | campo                                           |
  15. +-------------------------------------------------+
  16. | caracteres especiales: !"#$%&/()=?┐┤+{}.-,;^`¿~ |
  17. | diagonal invertida: \                          |
  18. | comilla simple: '                               |
  19. | comilla simple: '                               |
  20. | comilla simple: '                               |
  21. | comilla doble: "                                |
  22. | comilla doble: "                                |
  23. | comilla doble: "                                |
  24. +-------------------------------------------------+
  25. 8 rows in set (0.00 sec)

Dale también un vistazo a esta liga:

http://dev.mysql.com/doc/refman/5.0/...ng-syntax.html

Saludos
Leo.

Etiquetas: comillas, php, registros, sql, string, campos
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 08:11.