这是一个内存友好的函数,该函数应该能够 在单个查询中拆分大文件,而无需一次打开整个文件 :
function SplitSQL($file, $delimiter = ';'){ set_time_limit(0); if (is_file($file) === true) { $file = fopen($file, 'r'); if (is_resource($file) === true) { $query = array(); while (feof($file) === false) { $query[] = fgets($file); if (preg_match('~' . preg_quote($delimiter, '~') . 's*$~iS', end($query)) === 1) { $query = trim(implode('', $query)); if (mysql_query($query) === false) { echo '<h3>ERROR: ' . $query . '</h3>' . "n"; } else { echo '<h3>SUCCESS: ' . $query . '</h3>' . "n"; } while (ob_get_level() > 0) { ob_end_flush(); } flush(); } if (is_string($query) === true) { $query = array(); } } return fclose($file); } } return false;}
我在一个大型phpMyAdmin SQL转储上对其进行了测试,它工作得很好。
一些测试数据:
CREATE TABLE IF NOT EXISTS "test" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT, "description" TEXT);BEGIN; INSERT INTO "test" ("name", "description") VALUES (";;;", "something for you mind; body; soul");COMMIT;UPDATE "test" SET "name" = "; " WHERe "id" = 1;
并分别输出:
SUCCESS: CREATE TABLE IF NOT EXISTS "test" ( "id" INTEGER PRIMARY KEY AUTOINCREMENT, "name" TEXT, "description" TEXT );SUCCESS: BEGIN;SUCCESS: INSERT INTO "test" ("name", "description") VALUES (";;;", "something for you mind; body; soul");SUCCESS: COMMIT;SUCCESS: UPDATE "test" SET "name" = "; " WHERe "id" = 1;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)