Foros del Web » Programando para Internet » PHP »

problema al insertar dato en tabla mysql

Estas en el tema de problema al insertar dato en tabla mysql en el foro de PHP en Foros del Web. Hola, tengo un problema, tengo un formulario y un php para insertar en una bd mysql, por ejemplo: si en uno de los campos le ...
  #1 (permalink)  
Antiguo 13/01/2012, 02:25
Avatar de Quentin_  
Fecha de Ingreso: septiembre-2011
Mensajes: 32
Antigüedad: 13 años, 2 meses
Puntos: 0
problema al insertar dato en tabla mysql

Hola, tengo un problema,

tengo un formulario y un php para insertar en una bd mysql,

por ejemplo: si en uno de los campos le pongo "rebajas de hasta el 50%" no me deja insertarlo, si le pongo solo: "rebajas de hasta el 50" si que me deja insertalo, vamos que el error me lo esta dando en el caracter "%"

También me pasa con otros caracateres como el apostrofe en algunas palabaras en Catalan, por ejemplo: "l'hora"

En cambio si abro la bd por ejemplo con el Navicat y introduzco directamente: "rebajas de hasta el 50%" la tabla no se queja.

Gracias de antemano,

saludos.
  #2 (permalink)  
Antiguo 13/01/2012, 06:20
 
Fecha de Ingreso: diciembre-2002
Ubicación: bilbao
Mensajes: 345
Antigüedad: 21 años, 11 meses
Puntos: 3
Respuesta: problema al insertar dato en tabla mysql

que error te da, cual es el tipo del campo?

échale un ojo a addslashes()
__________________
aste nagusia
  #3 (permalink)  
Antiguo 13/01/2012, 08:41
Avatar de Quentin_  
Fecha de Ingreso: septiembre-2011
Mensajes: 32
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: problema al insertar dato en tabla mysql

Hola,

si pongo una palabra con apostrofe como por ejemplo " l'hora " el error que me da es el siguiente:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'hora','','')' at line 1

si pongo un % como por jemplo: "rebajas 50%" el error que me da es:

Warning: sprintf() [function.sprintf]: Too few arguments in C:\xampp\htdocs\mipagina\insertar.php on line 11 Query was empty

si lo pongo sin ningun caracter raro como: "l hola rebajas 50" lo inserta perfectamente.

He probado con el tipo de campo: text, char y varchar y en los tres me da este mismo error

el codigo html:

<label>texto:</label>
<input type="text" name="texto">

el insert del php:

$texto=$_POST['texto'];
$insertSQL = "INSERT INTO mitabla (texto) VALUES ('$texto')";
  #4 (permalink)  
Antiguo 13/01/2012, 17:08
 
Fecha de Ingreso: mayo-2009
Mensajes: 742
Antigüedad: 15 años, 5 meses
Puntos: 6
Respuesta: problema al insertar dato en tabla mysql

Hola.

Te esta dado errores de codigo que no has mostrado.

Muestra todo el codigo para poder ayudarte.

Un saludo.
  #5 (permalink)  
Antiguo 14/01/2012, 09:08
Avatar de Quentin_  
Fecha de Ingreso: septiembre-2011
Mensajes: 32
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: problema al insertar dato en tabla mysql

el error me lo esta dando en la linea del INSERT, eso seguro:

<?php require_once('../conections/conexion.php');

$texto=$_POST['texto'];
$insertSQL = "INSERT INTO mitabla (texto) VALUES ('$texto')";

mysql_select_db($database_conexion, $conexion);
$Result = mysql_query($insertSQL, $conexion) or die(mysql_error());

?>
  #6 (permalink)  
Antiguo 14/01/2012, 15:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: problema al insertar dato en tabla mysql

Cita:
He probado con el tipo de campo: text, char y varchar y en los tres me da este mismo error
Estás perdiendo la perspectiva. El problema no es con el tipo de dato o la base de datos, porque tu mismo has dicho:

Cita:
En cambio si abro la bd por ejemplo con el Navicat y introduzco directamente: "rebajas de hasta el 50%" la tabla no se queja.
Eso te debería dar la pauta que no es el tipo de campo, sino la forma en que ese valor le está llegando al MYSQL.
Y ya te han dicho:
Cita:
échale un ojo a addslashes()
Si te fijas en el manual de PHP, encontrarás esta explicación:
Cita:
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).

Un ejemplo de uso de la función addslashes() es cuando se introduce información en una base de datos. Por ejemplo, para insertar el nombre O'reilly en una base de datos, debe escaparse previamente. Es muy recomendado usar la función de escape de la misma Bade de Datos (DBMS) (por ejemplo mysqli_real_escape_string() para MySQL o pg_escape_string() para PostgreSQL), pero si la Base de Datos (DBMS) que se está usando no tiene una función de escape y usa la barra invertida \ para escapar caracteres especiales, puede utilizar esta función. Esto sólo será para obtener los datos en la base de datos, La barra invertida \ extra no será insertada. Si la directiva PHP magic_quotes_sybase tiene el valor on entonces las comillas simples de tipo 'se escapan añadiendo otra comilla simple adelante. '.
¿Te queda claro? Tu problema no es con MySQL, sino que no estás manejando correctamente la creación del valor para poder usarlo en una sentencia SQL.
Cuando no escapas el apóstrofe, este genera errores de interpretación de texto, porque en MySQL se usa para encerrar cadenas de texto, por esto, al usarlo dentro de un valor de cadena hace que se generen interrupciones de la misma, quedando el resto de la cadena comp arte de las cláusulas y generando un error sintáctico.
Por otro lado, el "%" es un caracter usado por MySQL como comodín en consultas de cadenas de texto, por lo que puede dar lugar a errores.
El hecho de que cuando creas la sentencia en el Navicat no te cause errores (y esto creo que no lo has razonado), es porque el Navicat tiene su propia forma de preparar la sentencia antes de enviarla al MySQL, donde gestiona este tipo de cosas y prepara la sentencia de modo tal que sea correctamente interpretada.
Lo que tienes que hacer tu es precisamente crear ese tipo de rutinas que Navicat ya tiene incorporadas.
Navicat, para que quede claro, no se conecta directamente al MySQL. Lo hace a través de una librería. No usa el MySQL, sino que se conecta a él. MySQL, como cualquier DBMS, es una caja cerrada que recibe y entrega datos, pero no permite a ningún programa acceder a su funcionamiento interno.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 14/01/2012 a las 15:42

Etiquetas: insert-tabla, mysql
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 22:34.