【问题标题】:connecting postgresql and codeigniter连接 postgresql 和 codeigniter
【发布时间】:2015-06-20 06:29:08
【问题描述】:

我是使用 postgresql 的新手,我已经使用 Codeigniter 一年了。

我有一个小型 postgresql 数据库,我想从 Codeigniter 调用它。

在我的 database.php 文件中,我有这个设置:

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
'dsn'   => 'pgsql:host=localhost;port=5432;dbname=test;user=postgres;password=aPass',
// 'dsn'    => '',
'hostname' => 'localhost',
'username' => 'postgres',
'password' => 'aPass',
'database' => 'test',
'dbdriver' => '',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
  // 'port' => '5432'
);

在控制器中我有这个功能:

public function dbtest(){

    $this->load->database();

    $feeds = $this->db->get('vts_feeds');
    echo $feeds;die();
}

我得到的结果是:

An Error Was Encountered
You have not selected a database type to connect to.

为什么它不起作用?

【问题讨论】:

    标签: php database postgresql codeigniter


    【解决方案1】:

    尝试设置,

    dbdriver - 数据库类型。即:mysql、postgres、odbc等。必须是 以小写形式指定。

    更多信息:https://www.codeigniter.com/user_guide/database/configuration.html

    编辑:在 postgres 中为 PDO 尝试此配置

    $db['default']['hostname'] = 'pgsql:host=localhost;dbname=yourdb'; //set host
    $db['default']['username'] = 'your username'; //set username
    $db['default']['password'] = 'your password'; //set password
    $db['default']['database'] = 'your database'; //set databse
    $db['default']['dbdriver'] = 'pdo'; //set driver here
    

    【讨论】:

    • 谢谢!我必须放 pdo 才能使用我得到的配置。你知道为什么我把 dbdriver = postgres 设置为空,然后将 dsn 设置为空白,为什么它不起作用?
    • @Limon 查看我编辑的答案,这可能会对您有所帮助,祝您好运
    【解决方案2】:

    删除“dsn”字符串并在配置数组中更改为'dbdriver' => 'postgre'

    尽管 CI 文档声明值应该是 'postgres',如果您检查 system>database>drivers 中的目录和文件名,该文件夹实际上称为 'postgre',文件名 'postgre_driver.php' 和类 'CI_DB_postgre_driver' 所以我们可以假设文档在这里是错误的。奇怪的是这之前没有抬起丑陋的头

    【讨论】:

    • 它说“无效的数据库驱动程序”。我将 dsn 保留为空白并将 dbdriver 更改为“postgres”
    • 嗯,很奇怪。系统数据库文件夹中有驱动文件吗?这应该只是尝试加载CI_postgres_db_driver 文件
    • 查看文件结构,看起来正确的驱动程序值是 'postgre',这很奇怪,因为 CI 文档肯定会说 'postgres'。尝试不带“s”,看看是否有帮助 - 我更新了我的答案
    • 是的,你是对的。在 CI 文档中有一个错误,它是 postgre 而不是 postgres。
    • 我升级了你的答案,但我首先使用了@BunnySunny 给出的解决方案
    【解决方案3】:

    我刚刚做了。 你就走吧:

    $db['default']['dsn'] = '';
    

    并设置:

    $db['default']['dbdriver'] = 'postgre';
    

    【讨论】:

      【解决方案4】:

      在文件database.php 中读取:

      'dbdriver' => ' ',
      

      提出以下论点:

      'dbdriver' => 'pgsql',
      

      【讨论】:

      • 对我来说它说“无效的数据库驱动程序”。我的操作系统是cent os。
      【解决方案5】:

      我遇到了同样的问题。试试这些步骤

      1. 不要删除dsn 字符串,将port=>5432 添加到您的配置数组中
      2. 将dbdriver设置为'dbdriver' => 'postgres'
      3. 检查你的 php.ini 文件是否启用了 postgre 扩展extension=php_pdo_pgsql.dll

      【讨论】:

      • 该扩展已启用。我也尝试过这种方式,但它只适用于 dbdriver=> pdo 和我提到的 dsn
      【解决方案6】:

      为什么不使用 linux 终端在 psql 中创建一个用户,然后授予该用户的所有访问权限?然后用那个更改配置数据库中的用户名和密码。

      【讨论】:

      • 请使用评论部分的后续问题,并注意这个问题已经回答了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      相关资源
      最近更新 更多