gpt4 book ai didi

php - 从 Codeigniter 备份恢复数据库

转载 作者:行者123 更新时间:2023-11-30 21:50:06 25 4
gpt4 key购买 nike

我试图使用内置的 CodeIgniter 进行自动数据库备份 $this->dbutil->backup() .

脚本是:

    $this->load->dbutil();

$backup = $this->dbutil->backup(array(
'tables' => array(), // Array of tables to backup.
'ignore' => array('regencies', 'villages', 'provinces'), // List of tables to omit from the backup
'add_drop' => TRUE, // Whether to add DROP TABLE statements to backup file
'add_insert' => TRUE, // Whether to add INSERT data to backup file
'newline' => "\n" // Newline character used in backup file
));

$this->load->helper('file');

$latest = md5(uniqid());

write_file(APPPATH . 'backup/'. $latest .'.gz', $backup);

脚本运行得很好。但是当我不想恢复时,问题就来了。它是这样的:

sql result of the codeigniter backup

因此我无法从 CLI (mysql -u root -p dbname < db.sql) 和 Navicat/Sequel Pro 恢复它。

restore database from cli

问题是,如何将它再次恢复到数据库? (注意 VALUES 后没有引号)

最佳答案

这是一个简单的 SQL 语法问题。字符串文字需要用单引号括起来。

INSERT INTO `foo` (`bar`,`bell`) VALUES ( Hey diddle diddle , cat and fiddle )

不会工作。我们需要

INSERT INTO `foo` (`bar`,`bell`) VALUES ('Hey diddle diddle','cat and fiddle')
^-----------------^ ^--------------^

仔细查看您尝试执行的实际 SQL 语句。

您的“卸载程序”需要更智能,在将字符串和日期值放入 SQL 语句时将它们括在单引号中。 (为方便起见,数字字面量也可以用单引号括起来,因此您无需区分,只需将 VALUES 列表中的所有值用单引号括起来即可。

还要注意当值包含单引号时会发生什么。例如:

 ... VALUES ( 'O'Leary' , ... 
^_^

这也将是一个错误。值中的单引号需要转义。在 MySQL 中执行此操作的一种方法是在单引号之前加上另一个单引号,如下所示:

 ... VALUES ( 'O''Leary' , ... 
^--------^

这将是有效的,并将评估为包含单引号的字符串 O'Leary

此外,MySQL 会将字符串文字中的反斜杠字符解释为转义字符。例如:

 ... VALUES ( 'this probably \not what we want' , 
^^

该序列 \n 将被解释为换行符,而不是字符 n。因此,反斜杠字符也需要转义。

等人

关于php - 从 Codeigniter 备份恢复数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47666510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com