PDO不在表中插入多行

时间:2012-07-11 20:35:08

标签: php mysql sql pdo

我在将图像数据插入数据库时​​遇到问题。我有一个名为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字段)。

1 个答案:

答案 0 :(得分:1)

您的id字段未设置为auto_increment。

将添加您发布的第一条记录,其中NULL为id;第二条记录不会被添加,因为已经有一个以NULL为主键的记录,所以它会失败 - 你没有在代码中进行任何错误检查,所以它不会打印出它得到的错误回来。