2

INSERT INTO毎回失敗する簡単なクエリがあります。奇妙なことに、エラーが最初に指している列、またはその前の列を取り出すと、別のエラーが発生します。

これはクエリです:

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());

私が使用しているサンプルデータは次のとおりです。

$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);

私が得るエラーは次のとおりです。

SQL 構文にエラーがあります。1 行目の「1999-09-08」付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

クエリから「publish_date」列を削除すると、次のような別のエラーが表示されます。

SQL 構文にエラーがあります。1 行目の '''','')' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

したがって、「作成者」列と関係があるに違いないと考えたので、それも削除して、次のクエリを残しました。

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());

...しかし、同じエラーが発生しました。誰かが私がここで間違っていることを教えてもらえますか? これはテーブル構造です:

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 ;

クエリは次のように出力されます。

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.')

重要な編集:

クエリが縮小されinsert into list_items (list_id,position) values ('82','1')ても失敗しますが、これは私にはまったく説明できません。

4

2 に答える 2

0

これらをエスケープしてみてください

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

クエリに含める前に

于 2012-07-04T07:36:31.150 に答える
-1

あなたの問題はここにあります:

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

配列である変数を囲むには、中括弧が必要です{}

例えば:

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

これは、PHPが入力内容を理解するためです。したがって、これをエコーアウトすると、期待どおりに配列の内容がエコーアウトされます。しかし、SQLはそうしません。

于 2012-07-04T07:46:30.693 に答える