我想一个接一个地导入多个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文件。