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

У меня есть веб-приложение на основе CodeIgniter, которое ранее использовало базу данных MySQL. Я изменил файл database.php, чтобы подключить его к SQL Server после переноса всех данных / таблиц. Я сейчас тестирую приложение и логин сработал. Однако при добавлении объекта из формы в веб-приложение при запросе вставки выдается ошибка.

Ошибка указывает, что она не может быть вставлена ​​в таблицу guests, если свойство ID Insert включено.

Произошла ошибка базы данных

Номер ошибки: 23000/544

[Microsoft] [Драйвер ODBC 17 для SQL Server] [SQL Server] Невозможно вставить явное значение для столбца идентичности в таблице 'гости', когда Для параметра IDENTITY_INSERT установлено значение OFF.

INSERT INTO "guests" ("id", "firstname", "lastname", "gender", "dob",
 "email", "country_id", "state_id", "city_id", "address", "mobile",
 "id_type", "id_no", "remark", "vip", "password", "added") VALUES (0,
 'abc', '123', '1', '', 'abc123@123.com', '', '', '', '', '899834534',
 '', '', '', 0, '6367c48dd193d56ea7b0baad25b19455e529f5ee', '2019-01-21
 09:58:11')

Имя файла: C: /wamp64/www/hms/system/database/DB_driver.php Номер строки: 691

Я знаю, что обходной путь - T-SQL SET IDENTITY_INSERT guests ON, но почему эти запросы на вставку вообще так структурированы?

Я проверил DB_Driver.php, и вот, возможно, соответствующая часть

/**
     * Generate an insert string
     *
     * @param   string  the table upon which the query will be performed
     * @param   array   an associative array data of key/values
     * @return  string
     */
    public function insert_string($table, $data)
    {
        $fields = $values = array();

        foreach ($data as $key => $val)
        {
            $fields[] = $this->escape_identifiers($key);
            $values[] = $this->escape($val);
        }

        return $this->_insert($this->protect_identifiers($table, TRUE, NULL, FALSE), $fields, $values);
    }

    // --------------------------------------------------------------------

    /**
     * Insert statement
     *
     * Generates a platform-specific insert string from the supplied data
     *
     * @param   string  the table name
     * @param   array   the insert keys
     * @param   array   the insert values
     * @return  string
     */
    protected function _insert($table, $keys, $values)
    {
        return 'INSERT INTO '.$table.' ('.implode(', ', $keys).') VALUES ('.implode(', ', $values).')';
    }

Как я могу внести изменения в проект, чтобы он не пытался вставить столбец Identity в каждый запрос вставки?

Редактировать : Вышеприведенный фрагмент кода, вероятно, не является тем местом, где формируется запрос, потому что я изменил его, и ошибка остается.

1 Ответ

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

Вы неправильно поняли сообщение об ошибке.Давайте еще раз процитируем это:

Невозможно вставить явное значение для столбца идентификаторов в таблице 'guest', когда для IDENTITY_INSERT установлено значение OFF

У вас есть столбец идентификаторов для вашей таблицы,который является id.В сообщении об ошибке указывается, что вы не можете указать явное значение для столбца идентификаторов (id), если для IDENTITY_INSERT установлено значение off.IDENTITY_INSERT - это параметр, который определяет, разрешены ли явные значения для столбцов идентификаторов.Поскольку это не разрешено, ожидается сообщение об ошибке.Вы можете включить IDENTITY_INSERT или не указывать значение id при вставке строки в таблицу.

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