InnoDB вставка завершается неудачно, работает нормально, когда таблица MyISAM - PullRequest
0 голосов
/ 24 мая 2011

У меня есть таблица InnoDB в MySQL 5.0.77, которая выглядит следующим образом:

CREATE TABLE `products_vendors` (
`vendor_id` int(10) unsigned NOT NULL,
`product_id` int(10) unsigned NOT NULL,
`original_quantity` smallint(6) unsigned NOT NULL,
`quantity` smallint(5) unsigned NOT NULL,
`price` decimal(19,8) NOT NULL,
`created` int(10) unsigned NOT NULL,
`valid_until` int(10) unsigned NOT NULL,
PRIMARY KEY  (`vendor_id`,`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Я использую PHP и PDO для выполнения вставки.Когда код выполняется, вставка завершается с ошибкой.Но, если я изменю таблицу с InnoDB на MyISAM, все будет работать нормально.Вставка InnoDB работает, если я запускаю ее через PHPMyAdmin.

Я свел мою проблему к этому куску кода (мои учетные данные базы данных верны, так как MyISAM работает нормально):

$insert_sql = "insert into products_vendors (";
$insert_sql.= "`vendor_id`,";
$insert_sql.= "`product_id`,";
$insert_sql.= "`original_quantity`,";
$insert_sql.= "`quantity`,";
$insert_sql.= "`price`,";
$insert_sql.= "`created`,";
$insert_sql.= "`valid_until` ";
$insert_sql.= ") values (";
$insert_sql.= "'1', '2', '3', '4', '5', '6', '7');";

$db = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASSWORD, array(PDO::ATTR_PERSISTENT, true));
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$st = $db->prepare($insert_sql);
$st->execute();

Что могло бы послужить причиной того, что этот код прекрасно работает с MyISAM, но не работает для InnoDB без вывода сообщений?

Большое спасибо за любые рекомендации.

1 Ответ

1 голос
/ 24 мая 2011

2 идеи:

  • Вы забыли совершить транзакцию.
  • Ваше постоянное соединение находится в неопределенном состоянии
...