Php Codigniter备份库创建错误的插入查询

Php Codigniter备份库创建错误的插入查询,php,mysql,codeigniter,Php,Mysql,Codeigniter,我使用codigniter库“dbutil”创建备份,我的mysql数据库中有字段,当使用下面给定的代码时,这些字段具有数据类型位 public function run_backup() { $filename="MembersPro_database_$this->curr_date.sql"; $filepath="application/upload/DatabaseBackup/$filename"; $dbfilepat

我使用codigniter库“dbutil”创建备份,我的mysql数据库中有字段,当使用下面给定的代码时,这些字段具有数据类型位

 public function run_backup()
    {
        $filename="MembersPro_database_$this->curr_date.sql";
        $filepath="application/upload/DatabaseBackup/$filename";
        $dbfilepath="MembersPro/application/upload/DatabaseBackup/$filename";

        $prefs = array(
            'ignore'        => array(),                     // List of tables to omit from the backup
            'format'        => 'sql',                       // gzip, zip, txt
            'filename'      =>$filepath,                   // File name - NEEDED ONLY WITH ZIP FILES
            'add_drop'      => TRUE,                        // Whether to add DROP TABLE statements to backup file
            'add_insert'          => TRUE,
            "foreign_key_checks"  =>FALSE
           /* 'newline'       => "\n",*/
            // Newline character used in backup file
        );
        $backup="CREATE DATABASE IF NOT EXISTS `MembersManagmentSystem`; USE `MembersManagmentSystem` ";
        $backup .= $this->dbutil->backup($prefs);
        if(!write_file($filepath, $backup))
        {
            echo "Error";die;
        }
        else
        {
            $_SESSION['sucessmsgbackup']="true";
        }
        $this->insert_into_datbase($filename,$dbfilepath);
        redirect("ViewDatabaseBackup");
    }
获取错误的输出插入查询

INSERT INTO `User` (`userId`, `userRoleId`,`userActive`, `userIsDelete`) VALUES ('20000046', '20001','1', '0');
在上面给定的查询中,数据类型为“bit”的“userActive”和“userIsDelete”字段以及DbUtil库创建的查询将其视为字符串,因此在mysql中出现警告错误

"out of range column value"

查看文件夹并修改核心类,使其不会转义,例如mysqli驱动程序

system/database/drivers/mysqli

并查找文件
mysqli_utility.php

定位线

$is_int[$i] = in_array(strtolower($field->type),
                            array('tinyint', 'smallint', 'mediumint', 'int', 'bigint'), //, 'timestamp'),
                            TRUE);
类型编号

numerics
-------------
BIT: 16
TINYINT: 1
BOOL: 1
SMALLINT: 2
MEDIUMINT: 9
INTEGER: 3
BIGINT: 8
SERIAL: 8
FLOAT: 4
DOUBLE: 5
DECIMAL: 246
NUMERIC: 246
FIXED: 246
并将您的数据类型添加到上面的数组中,如下所示

$is_int[$i] = in_array($field->type,
                            array(16, 1, 2, 9, 3, 8),
                            TRUE);

这是在普通的Linux服务器上吗?不,这是在windowsWell上,令人伤心。若在Linux上你们可以使用mysqldump,在PHP中是一个完整备份的一行程序。@ShahneelAhmed欢迎你们,谢谢你们的报道too@ShahneelAhmed:以上解决方案仅适用于您的数据类型,错误已修复,请参考