1

画像データをデータベースに挿入できません。というテーブルがありますimages。PHPMyAdmin でダンプすると、次のようになります。

CREATE TABLE IF NOT EXISTS `images` (
  `id` int(11) NOT NULL,
  `orig_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `hash` varchar(6) COLLATE utf8_unicode_ci NOT NULL,
  `filename` varchar(12) COLLATE utf8_unicode_ci NOT NULL,
  `uploaded` datetime NOT NULL,
  `views` int(11) NOT NULL DEFAULT '0',
  `album_id` int(11) DEFAULT NULL,
  `user_id` int(11) DEFAULT NULL,
  `server_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `server_id` (`server_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

これは、行を挿入するために使用しているコードです。

// Database connection
$db = new PDO('mysql:host=localhost;dbname=testdb', 'root', '');                  

// some code...

$st = $db->prepare('INSERT INTO `images` (orig_name, hash, filename, uploaded, server_id)
                    VALUES (?, ?, ?, ?, (SELECT `id` FROM `servers` WHERE `name` = ?))');
$st->execute(array($origName, $fileHash, $filename, date('c'), $server));

// more code...

// Database cleanup
$st = null;
$db = null;

スクリプトはエラーを返さず、挿入された最初の行に対して問題なく動作します。スクリプトを再度実行すると、それ以上imagesテーブルに行を挿入できません。このように動作する理由はわかりません。各フィールドに入るデータは毎回一意です (server_id フィールドを除く)。

4

1 に答える 1

1

idフィールドが auto_increment に設定されていません。

投稿した最初のレコードが追加され、NULL がid;として追加されます。NULL を主キーとするレコードが既に存在するため、2 番目のレコードは追加されず、失敗します。コードにエラー チェックがないため、取得しているエラーが出力されません。戻る。

于 2012-07-11T20:42:48.120 に答える