【问题标题】:Codeigniter returns no rows of any sqlite3 tableCodeigniter 不返回任何 sqlite3 表的行
【发布时间】:2015-11-23 08:21:27
【问题描述】:

我是 CodeIgniter 的初学者(或多或少 1 个月),我正在尝试使其与 sqlite3 数据库一起使用,但我很难过。我错过了什么?

我使用this thread 配置它,希望它不是导致此问题的原因。

$active_group = 'default';
$active_record = TRUE;

$db['default']['hostname'] = 'sqlite:'.APPPATH.'db/******.s3db';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['database'] = '';
$db['default']['dbdriver'] = 'pdo';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

这是我的模型:

<?php
class QuoteModel extends CI_Model {
    public function __construct() {
        parent::__construct();
        $this->load->database();
    }
    public function getQuote() {
        $query = $this->db->get('quote');
        return $query->row_array();
    }
}

将表名更改为不在数据库中的名称会产生错误,这让我认为与数据库的连接有效:

A Database Error Occurred
Error Number: HY000
no such table: unknown_table
SELECT * FROM unknown_table
Filename: C:\xampp\htdocs\*****\system\database\DB_driver.php
Line Number: 330

通过将table_name 更改为数据库中的任何其他表,$this-&gt;db-&gt;last_query() 看起来没问题,并在我的 SQLiteStudio 中正确执行,返回了许多行,但 $query-&gt;num_rows() 返回 0。

没有错误,但 PHP 日志中只有一个警告,可能与我的问题无关:

[22-Nov-2015 23:37:32 UTC] PHP Warning:  Module 'oci8' already loaded in Unknown on line 0

我将 XAMPP 1.8.3 与 PHP 5.5.15 一起使用,PDO 支持启用了 PDO 驱动程序的 mysql、sqlite 和 SQLite 3.x 的 PDO 驱动程序启用了 SQLite 库的 3.8.4.3、CodeIgniter 2.2 在 Windows 7 Prof SP1 64 位中。

请帮忙。

【问题讨论】:

  • 数据库是sqlite,我认为我们不需要用户名或密码来连接。

标签: php codeigniter pdo sqlite


【解决方案1】:

试试

$db['default']['username'] = 'DATABASE USERNAME';

$db['default']['password'] = 'IF USER HAS A PASSWORD';

$db['default']['database'] = 'DATABASE NAME HERE';

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

【讨论】:

  • 我尝试将用户名和密码留空,因为它是一个 sqlite 数据库,并将数据库设置为 APPPATH.'db/******.s3db' 因为正如 CI 指南所说,“数据库名称将是您的数据库文件的路径",然后按照您的建议将 dbdriver 发送到 'sqlite'。页面变成了空白。如果是这样的话,不,它不起作用。
【解决方案2】:

您的数据库名称为空。我认为这是错误的。

交叉检查

function test()
{
    $CI =& get_instance();
    $CI->load->database();
    print_r($CI->db);
}

以上代码将打印您在database.php 中设置的所有变量。

同时尝试设置您的数据库名称。

【讨论】:

    【解决方案3】:

    一位出色的办公室同事建议在 CodeIgniter 3 中尝试一下。那我很高兴。

    在我的database.php中,用户名、密码和数据库名都是空的:

    $active_group = 'default';
    $query_builder = TRUE;
    
    $db['default'] = array(
        'dsn'   => '',
        'hostname' => 'sqlite:'.APPPATH.'db/******.s3db',
        'username' => '',
        'password' => '',
        'database' => '',
        'dbdriver' => 'pdo',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => (ENVIRONMENT !== 'production'),
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => TRUE
    );
    

    我正在使用 CodeIgniter 3.0.3,这是截至目前框架的当前版本。

    【讨论】:

      猜你喜欢
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多