我遇到以下问题(表或视图不存在)。我正在使用CodeIgniter 3和Oracle 12c。
我的模特:
public function getAll(){
$query = $this->db->get('usr');
return $query->result_array();
}
我已经尝试了很多,但没有解决方案能够解决我的问题。对于每个人都参考了codeIgniter 2或更早的版本。
如果我使用以下查询,则代码有效。但是我想使用ActiveRecords:
SELECT * FROM usr
这是相同的问题CodeIgniter and Oracle database - ActiveRecord insert() is adding double quotes in query。但是该解决方案对我不起作用。
答案 0 :(得分:0)
我找到了解决方法:https://forum.codeigniter.com/archive/index.php?thread-47389.html
葡萄牙语的解决方案:https://wordivino.blogspot.com/2019/01/codeigniter-e-oracle-12c-message.html
最后一篇帖子 :
请查看CI生成的SQL查询:
SELECT * FROM "project_users" WHERE "userid" = 'user1' AND "password" = 'iamuser1'
请注意,表名和表字段用双引号引起来,并且要指出问题的原因:在oracle SQL查询中,请不要对标识符的名称进行转义。
在CI的来源中,基类CI_DB有一个标志,指示必须对标识符进行转义。在Oracle中这不是必需的,因此我只需在system / database / drivers / oci8_diver.php中添加此属性即可。
var $_protect_identifiers = FALSE;
(如果其他人想要测试它,我将上面的行放在OCI 8驱动程序上的db_connect()方法之前)。
对于我来说,我将变量放在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
添加$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))
{
[...]