Когда я получаю ошибку из базы данных, необходимо отобразить ее в правильном формате - PullRequest
0 голосов
/ 08 января 2019

Когда я выполняю несколько запросов, используя цикл foreach, я получаю ошибку из базы данных. Мне нужно, чтобы получить эту ошибку в переменную или массив. Когда я получаю сообщение об ошибке, в это время страница падает. Но я хочу показать эту ошибку в правильном формате, а также вернуться к другим запросам, которые были запущены. Здесь я передаю вам код, который я запускаю.

$sql =  file_get_contents($path."abc.sql");
$sqls = explode(';', $sql);
array_pop($sqls);
foreach($sqls as $statement){
    $this->db->query($statement);
}

Я приложил изображение сообщения об ошибке. enter image description here

Таблица уже создана, и я запускаю запрос ниже.

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;

1 Ответ

0 голосов
/ 08 января 2019

Когда вы запускаете этот скрипт, если таблица cli_group уже существует, она не будет создана снова из-за предложения EXISTS в операторе CREATE TABLE.

Однако это, конечно, означает, что его первичный ключ также уже существует, и вы не можете создать новый с помощью оператора ALTER TABLE - в сообщении об ошибке говорится, что вы не можете добавить другое определение первичного ключа в таблицу, которая уже имеет один. Если вы хотите это сделать, вам сначала нужно удалить старый ключ.

Тем не менее, я не знаю ваших точных бизнес-требований здесь, но я думаю, что почти наверняка имеет смысл просто объявить первичный ключ в операторе CREATE TABLE, а не использовать отдельный оператор ALTER TABLE. Затем, если он уже существует, ничего не создается, включая первичный ключ. Таким образом, вы можете избежать этой проблемы неопределенности относительно статуса таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...