Diferentes errores de sintaxis de MySQL en una consulta

Tengo un simple INSERT INTO consulta que falla cada vez. Lo extraño es que, si elimino la columna a la que apunta el error inicialmente, o la anterior, obtengo un error diferente.

Esta es la consulta:

mysql_query("insert into list_items
 (list_id,position,item,small_image,large_image,asin,description,
  author,publish_date,amazon_description) values  
 ('$id','$key','$value','$small_image','$large_image','$asin',
  '$descriptions[$key]','$authors[$key]','$publish_date','$amazon_description')")
or die(mysql_error());

Los datos de muestra que estoy usando son:

$key=1;
$value=mysql_real_escape_string("Harry Potter and the Sorcerer's Stone");
$small_image="some_image_url";
$large_image="some_image_url";
$asin="13412341234";
$descriptions[$key]="";
$authors[$key]="JK Rowling";
$publish_date="1999-09-08";
$amazon_description=mysql_real_escape_string($long_amazon_description);

El error que recibo es:

Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de '1999-09-08')' en la línea 1

Cuando elimino la columna 'publish_date' de la consulta, aparece un error diferente que dice:

Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de '''','')' en la línea 1

Así que pensé que debía tener algo que ver con la columna 'autor', así que también la eliminé, dejando esta consulta:

mysql_query("insert into list_items 
 (list_id,position,item,small_image,large_image,
  asin,description,amazon_description) values 
 ('$id','$key','$value','$small_image','$large_image',
 '$asin','$descriptions[$key]','$amazon_description') ")
or die(mysql_error());

... pero tengo el mismo error. ¿Alguien puede decirme qué estoy haciendo mal aquí? Esta es la estructura de la tabla:

CREATE TABLE IF NOT EXISTS `list_items` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `list_id` int(11) NOT NULL,
  `position` int(11) NOT NULL,
  `item` varchar(512) NOT NULL,
  `item_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `voted_up` int(11) NOT NULL,
  `voted_down` int(11) NOT NULL,
  `small_image` varchar(128) NOT NULL,
  `large_image` varchar(128) NOT NULL,
  `asin` varchar(16) NOT NULL,
  `description` mediumtext NOT NULL,
  `author` varchar(128) NOT NULL,
  `publish_date` varchar(16) NOT NULL,
  `genre` varchar(128) NOT NULL,
  `amazon_description` mediumtext NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=379 ;

La consulta se imprime como:

insert into list_items
(list_id,position,item,small_image,large_image,asin,description,
author,publish_date,amazon_description) values
('76','1','Harry Potter And The Sorcerer\'s Stone',
 'http://ecx.images-amazon.com/images/I/51MU5VilKpL._SL160_.jpg',
 'http://ecx.images-amazon.com/images/I/51MU5VilKpL.jpg','059035342X','',
 'J.K. Rowling','1999-09-08',
 'Harry Potter has no idea how famous he is. That\'s because he\'s being raised by his miserable aunt and uncle who are terrified Harry will learn that he\'s really a wizard, just as his parents were. But everything changes when Harry is summoned to attend an infamous school for wizards, and he begins to discover some clues about his illustrious birthright. From the surprising way he is greeted by a lovable giant, to the unique curriculum and colorful faculty at his unusual school, Harry finds himself drawn deep inside a mystical world he never knew existed and closer to his own noble destiny.')

EDICIÓN IMPORTANTE:

Cuando la consulta se reduce a insert into list_items (list_id,position) values ('82','1') todavía falla, lo cual es completamente inexplicable para mí.

preguntado el 04 de julio de 12 a las 08:07

mysql_real_escape_string($long_amazon_description") <-- ¿por qué tienes un " ¿ahí? -

Eso es un error tipográfico, lo siento, no es así en el código original. -

Asigne su SQL a una variable antes de ejecutarlo. Luego puede generarlo para ver exactamente lo que se está pasando a mysql_query(). Supongo que las comillas de cadenas han salido mal en alguna parte... -

@eggyal, Buen punto. No vi que lo almacenó como una cadena, ¡yo siempre almacené el mío como una fecha! -

¡No coloque apóstrofes alrededor de las variables int en la consulta! así como insertar en .. ... valores ($id, $clave ... '$autor') -

2 Respuestas

intenta escapar de estos

$small_image="some_image_url";
$large_image="some_image_url";

antes de incluir en su consulta

Respondido 04 Jul 12, 08:07

Tu problema está aquí:

... values ('$id','$key','$value','$small_image','$large_image',
 '$asin','$descriptions[$key]','$amazon_description') ")

alrededor de las variables que son matrices, debe tener llaves {}.

p.ej:

 '{$descriptions[$key]}','{$authors[$key]}'

Esto es porque PHP entenderá lo que está escribiendo. así que cuando hagas eco de esto, hará eco del contenido de la matriz como era de esperar. Pero SQL no lo hare

Respondido 04 Jul 12, 08:07

$descriptions[$key] es solo una cadena cuando llega a MySQL. Además, la consulta falla en lo que pongo allí, e incluso si elimino esa parte por completo. - sveti petar

Hasta donde yo sabía, no para claves citadas. Consulte la referencia de php.net: http://fr2.php.net/manual/en/language.types.string.php#language.types.string.parsing.complex - arrendajo

Por cierto, ¿has comprobado todos los tipos de sintaxis en la base de datos? p.ej. Si null es el valor del campo automático, NOT NULL también debe estar desmarcado en la GUI de la base de datos. He tenido un problema similar antes debido a eso. - arrendajo

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.