я создаю резервную копию, используя библиотеку 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');
в указанных выше полях запроса «userActive» и «userIsDelete», имеющих тип данных «бит», и запрос, созданный библиотекой DbUtil, обрабатывает его как строку, поэтому я получаю предупреждение об ошибке в mysql
"out of range column value"
Читайте здесь Почему вы не должны использовать BIT столбцы в MySQL
О проблеме сообщили здесь в Github
Посмотрите в папку и измените основные классы так, чтобы это не убежит, например для драйвера 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);
Других решений пока нет …