Я нахожу решение: https://forum.codeigniter.com/archive/index.php?thread-47389.html
Решения на португальском: https://wordivino.blogspot.com/2019/01/codeigniter-e-oracle-12c-message.html
Последнее сообщение :
Пожалуйста, посмотрите на SQL-запрос, сгенерированный CI:
SELECT * FROM "project_users" WHERE "userid" = 'user1' AND "password" = 'iamuser1'
Обратите внимание, что имена таблиц и поля таблиц имеют двойные кавычки, и что причина проблемы: в SQL-запросе оракула, вы НЕ экранируете имя идентификаторов.
Если посмотреть на источник CI, у базового класса CI_DB есть флаг, указывающий, что идентификаторы ДОЛЖНЫ быть экранированы.Это не обязательно в Oracle, поэтому я просто добавляю этот атрибут в system / database / drivers / oci8_diver.php ...
var $_protect_identifiers = FALSE;
(Если кто-то еще хочет проверить это, я поставил строку вышеметод db_connect () в драйвере OCI 8).
В моем случае я ставлю переменную после class CI_DB_oci8_driver extends CI_DB {
class CI_DB_oci8_driver extends CI_DB {
var $_protect_identifiers = FALSE;
[...]
Другой способ решить эту проблемупроблема заключается в изменении DB_driver.php
(system / database / DB_driver.php).
Найдите public function protect_identifiers
add $item = strtoupper($item);
Результат:
public function protect_identifiers($item, $prefix_single = FALSE, $protect_identifiers = NULL, $field_exists = TRUE)
{
$item = strtoupper($item); //linha inserida
if ( ! is_bool($protect_identifiers))
{
[...]