InnoDB插入无声地失败,当表是MyISAM时工作正常

时间:2011-05-24 17:42:07

标签: php mysql pdo innodb myisam

我在MySQL 5.0.77中有一个InnoDB表,如下所示:

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,一切正常。如果我通过PHPMyAdmin运行它,InnoDB插入工作。

我把问题归结为这段代码(我的数据库凭据是正确的,因为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 个答案:

答案 0 :(得分:1)

2个想法:

  • 您忘了提交交易。
  • 您的持久连接处于未确定状态