Codeigniter insert_batch错误

时间:2014-01-17 22:58:07

标签: php database codeigniter sqlite insert

我使用Codeigniter v2.1.4在sqlite3数据库中插入一些值。

问题是,当我尝试插入批处理时,它会给我一个错误:

>[17-Jan-2014 22:44:17 UTC] PHP Fatal error:  Call to a member function execute() on a >non-object in E:\Repository\cashy-support-app2\system\database\drivers\pdo\pdo_driver.php >on line 193
>[17-Jan-2014 22:44:17 UTC] PHP Stack trace:
>[17-Jan-2014 22:44:17 UTC] PHP   1. {main}() E:\Repository\cashy-support-app2\index.php:0
>[17-Jan-2014 22:44:17 UTC] PHP   2. require_once() E:\Repository\cashy-support-app2\index.php:202
>[17-Jan-2014 22:44:17 UTC] PHP   3. call_user_func_array() E:\Repository\cashy-support-app2\system\core\CodeIgniter.php:359
>[17-Jan-2014 22:44:17 UTC] PHP   4. Main_controller->index() E:\Repository\cashy-support-app2\system\core\CodeIgniter.php:359
>[17-Jan-2014 22:44:17 UTC] PHP   5. Favorites_Model->addToTemp() E:\Repository\cashy-support-app2\application\controllers\main_controller.php:7
>[17-Jan-2014 22:44:17 UTC] PHP   6. CI_DB_driver->query() E:\Repository\cashy-support-app2\application\models\favorites_model.php:106
>[17-Jan-2014 22:44:17 UTC] PHP   7. CI_DB_driver->simple_query() E:\Repository\cashy-support-app2\system\database\DB_driver.php:299
>[17-Jan-2014 22:44:17 UTC] PHP   8. CI_DB_pdo_driver->_execute() E:\Repository\cashy-support-app2\system\database\DB_driver.php:453

如果我只插入一行就可以了。

这是有问题的查询:

INSERT INTO temp (Date, Name)
   Values("test","test2"),("test","test2"),("test","test2");

如果我使用这个:

INSERT INTO temp (Date, Name) Values("test","test2");

它运作正常。

此外,如果我使用db->insert(tablename, values)它可以正常工作,但如果我使用db->insert_batch(tablename, array),我会得到与上述相同的错误。

在一个单独的sqlite浏览器中,我可以在同一个数据库上执行上述查询而没有任何问题。

这是我在Codeigniter中的数据库配置:

$active_group = "default";
$active_record = TRUE;

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

这是数据库:

CREATE TABLE [temp] (
    [Date] [TEXT(255)], 
    [Name] [TEXT(255)], 
    [Mail] [TEXT(255)], 
    [Subject] [TEXT(255)], 
    [Conversation] [TEXT(255)], 
    [Language] [TEXT(255)], 
    [Body] [TEXT(30000)], 
    [ROWID] [TEXT(255)], 
    [TableName] [TEXT(255)], 
    [userid] [TEXT(255)]);

使用print_r(array)后的数组如下所示:

[18-Jan-2014 10:20:04 UTC] Array
(
    [0] => Array
        (
            [Date] => test
            [Name] => test
        )

    [1] => Array
        (
            [Date] => test
            [Name] => test
        )
)

知道为什么这样做吗? (不知何故,我认为Codeigniter设置中存在问题,而不是查询本身,因为我使用sqlite浏览器在同一数据库上使用相同的查询,并且工作正常)

3 个答案:

答案 0 :(得分:2)

我已经将它作为CodeIgniter 2.1.4问题发布在github上,并且我发现,“CI 2.1.4不支持SQLite3,2.1.x中的PDO驱动程序是实验性的,这意味着错误是预期的。通过'sqlite3'和'pdo / sqlite'驱动程序提供的完整SQLite3支持在3.0-dev中可用“ - https://github.com/EllisLab/CodeIgniter/issues/2834#issuecomment-32838494

答案 1 :(得分:0)

因为

致命错误:在第193行的E:\ Repository \ cashy-support-app2 \ system \ database \ drivers \ pdo \ pdo_driver.php中的非对象上调用成员函数execute()。

我猜你的数组不包含数据库中列的键。

http://ellislab.com/codeigniter/user-guide/database/active_record.html#insert

如果没有看到更多的代码,很难确定问题。

答案 2 :(得分:0)

我认为这是因为sqlite不支持这种查询,不确定codeigniter是否处理了这个问题。