如何将多个sql文件一一导入数据库

时间:2019-05-17 02:33:20

标签: php mysql batch-file

我想一个接一个地导入多个sql文件,成功导入后,我想将该文件移动到history文件夹。如果有一个导入失败的文件,我希望该文件不移到历史文件夹,这样我就知道哪个文件失败并稍后导入该文件。

如何按1导入多个sql文件而不首先合并所有文件? 使用PHP或批处理文件。

我尝试过首先合并文件,但是如果有任何查询失败,我将永远不会知道哪个。

这是我用于合并文件然后将其导入数据库的批处理文件

copy /b C:\xampp\htdocs\cptest\v2\HO\sql\*.sql C:\xampp\htdocs\cptest\v2\HO\sql\all_files.sql
C:\xampp\mysql\bin\mysql -u root cptest < C:\xampp\htdocs\cptest\v2\HO\sql\all_files.sql

我要导入的sql文件包含将行插入数据库的查询。 这是一些例子。

INSERT INTO `inout` (`id`, `date`, `time`, `type`, `qty`, `outlet`) 
VALUES 
    (NULL, '2019-05-15', '13:49:47', 'A', '6', 'TSC');

如果我将其合并为1个文件,应该是这样

INSERT INTO `inout` (`id`, `date`, `time`, `type`, `qty`, `outlet`) 
VALUES 
    (NULL, '2019-05-15', '13:49:47', 'A', '6', 'TSC');
INSERT INTO `inout` (`id`, `date`, `time`, `type`, `qty`, `outlet`) 
VALUES 
    (NULL, '2019-05-15', '13:50:01', 'V', '34', 'PV');

如果我有条件地终止存在和错误的进程,并且错误仅发生在1个查询上,是不是取消了所有查询导入?

我只想一次导入1个sql文件,因此如果sql导入成功,我可以进行一些有条件的操作,然后移至历史记录文件夹,如果失败则移至失败的传输文件夹。

edit:在这里,我将我的代码生成zip文件。

<?php
date_default_timezone_set("Asia/Bangkok");
$date =  date('Y-m-d');
$time =  date('H:i:s');
$timettl = date('H.i.s');
$type = $_POST['type'];
$qty = $_POST['qty'];
$outlet = $_POST['outlet'];
$quetest = "INSERT INTO `inout` (`id`, `date`, `time`, `type`, `qty`, `outlet`) VALUES (NULL, '" . $date . "', '" . $time . "', '" . $type . "', '" . $qty . "', '" . $outlet . "');";
$a = "test" . $date . "_" . $time . ".sql";
// file_put_contents("test/" . $a . "", $quetest);
$zip = new ZipArchive;
$res = $zip->open( 'C:\xampp\htdocs\cptest\V2\Transfer\test' . $date . '_' . $timettl . '.zip', ZipArchive::CREATE);
$zip->setPassword('12345');
if ($res === TRUE) {
    $zip->addFromString( $a, $quetest);
    $zip->setEncryptionName( $a, ZipArchive::EM_AES_256);
    $zip->close();
    echo 'ok';
} else {
    echo 'failed';
}
?>

我使用post方法输入表单,并生成包含.sql文件的zip文件。

0 个答案:

没有答案