当我使用foreach循环运行多个查询时,我从数据库中获取错误。 我需要将该错误放入变量或数组中。 当我那时候出错时,页面崩溃了。但是我想以正确的格式显示该错误,并且还回退其他被触发的查询。 在这里,我将运行的代码传递给您。
$sql = file_get_contents($path."abc.sql");
$sqls = explode(';', $sql);
array_pop($sqls);
foreach($sqls as $statement){
$this->db->query($statement);
}
表已经创建,我在查询下面运行。
CREATE TABLE IF NOT EXISTS `cli_group` (
`id` int(11) NOT NULL,
`name` char(20) NOT NULL DEFAULT '0',
`description` varchar(100) NOT NULL,
`reseller_id` int(11) DEFAULT '0' COMMENT 'Accoun',
`assignment_method` tinyint(1) NOT NULL DEFAULT '0',
`status` tinyint(1) NOT NULL DEFAULT '1',
`creation_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`last_access_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `cli_group`
ADD PRIMARY KEY (`id`),
ADD KEY `reseller` (`reseller_id`);
ALTER TABLE `cli_group`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
答案 0 :(得分:0)
运行该脚本时,如果cli_group
表已经存在,则由于EXISTS
语句中的CREATE TABLE
子句而不会再次创建该表。
但是,这当然意味着它的主键也已经存在,并且您无法通过ALTER TABLE
语句创建一个新的主键-错误消息告诉您不能将另一个主键定义添加到表中已经有一个。如果要这样做,则必须先删除旧密钥。
但是,我在这里不知道您的确切业务要求,但是我认为在CREATE TABLE
语句中简单地声明主键而不是使用单独的ALTER TABLE
语句几乎更有意义。 。然后,如果已经存在,则不会创建任何内容,包括主键。这样一来,您就可以避免表格状态不确定的问题。