php.ini 通常限制上傳檔案大小為 2MB,PHPMyAdmin 使用上傳方式導致失敗。.sql 檔導入時,常因單引號處理不當導致失敗,只能用 MySQL 客戶端程式導入。針對超過 10MB 的資料庫,必須解決這些問題。
呼叫方式:****.php?table=tablename。目前一次保存一個表,每行為一個欄位資料。
<?php
if ($table == "") exit();
mysql_connect("localhost", "name", "password");
mysql_select_db("database");
$result = mysql_query("SELECT * FROM $table");
if (mysql_num_rows($result) <= 0) exit();
echo "開始轉換資料到文字...<br>";
$handle = fopen("$table.txt", "w");
$numfields = mysql_num_fields($result);
fputs($handle, $numfields . "\n");
for ($k = 0; $k < mysql_num_rows($result); $k++) {
$msg = mysql_fetch_row($result);
for ($i = 0; $i < $numfields; $i++) {
$msg[$i] = str_replace("\n", "&&PHP2000MySQLreturn&&", $msg[$i]);
$msg[$i] = str_replace("\r", "&&PHP2000MySQLreturn&&", $msg[$i]);
fputs($handle, $msg[$i] . "\n");
}
fputs($handle, "------- PHP2000 dump data program V1.0 for MySQL --------\n");
}
fclose($handle);
echo "ok";
?>
用法同導出程式。
<?php
if ($table == "") exit();
mysql_connect("localhost", "name", "password");
mysql_select_db("database");
$message = file("$table.txt");
echo $numfields = chop($message[0]);
for ($k = 1; $k < count($message); $k += ($numfields + 1)) {
$value = "";
for ($i = $k; $i < ($k + $numfields - 1); $i++) {
$tmp = str_replace("&&PHP2000MySQLreturn&&", "\n", chop($message[$i]));
$value .= "'" . addslashes($tmp) . "',";
}
$tmp = str_replace("&&PHP2000MySQLreturn&&", "\n", chop($message[$k + $numfields - 1]));
$value .= "'" . $tmp . "'";
$query = "INSERT INTO $table VALUES (" . $value . ")";
echo mysql_error();
mysql_query($query);
echo $k . " ";
}
echo "ok";
?>
file() 函數可能有問題(我 10MB 資料未出現問題),可改用 fopen() 逐行讀取。