| | 大家一定使用過(guò) phpmyadmin 里面的數據庫導入,導出功能,非常方便。但是在實(shí)際應用中,我發(fā)現如下幾個(gè)問(wèn)題:
1 數據庫超過(guò)一定尺寸,比如6M 這時(shí)使用導出一般沒(méi)問(wèn)題,可以正確的保存到本機硬盤(pán)上面,但是導入則不行!原因是:一般的 PHP.INI 里面設置臨時(shí)文件/上傳文件的大小限制為2M,而phpmyadmin使用了上傳的方式,造成失敗。
2 導出到硬盤(pán)的 .SQL 文件在導回時(shí),經(jīng)常出現由于某些單引號的問(wèn)題引起失敗,造成導入失敗,只能用 mysql等應用程序導入了。
我的數據庫已經(jīng)超過(guò)10M,所以必須解決這個(gè)問(wèn)題。我的思路:
導出: 用phpmyadmin 保存數據庫/表格結構,用腳本讀取數據庫內容并保存到文件里面! 導入: 用phpmyadmin 恢復數據庫/表格結構,用腳本讀取文件,然后保存到庫里面!
導出程序如下:調用方法為 ****.php?table=tablename 這個(gè)簡(jiǎn)單的程序目前一次保存一個(gè)表格??!每行為一個(gè)字段的數據??! < ? 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 "開(kāi)始轉換數據到文本... "; $handle = fopen("$table.txt","w"); $numfields = mysql_num_fields($result); fputs($handle,$numfields."\r\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("\r\n","&&php2000mysqlreturn&&",$msg[$i]); $msg[$i] = str_replace("\n" ,"&&php2000mysqlreturn&&",$msg[$i]); fputs($handle,$msg[$i]."\r\n"); } fputs($handle,"------- php2000 dump data program V1.0 for MySQL --------\r\n"); } fclose($handle); echo "ok"; ?>
導入的程序如下:用法同上面! < ? 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&&","\r\n",chop($message[$i])); $value .= "‘".addslashes($tmp)."‘,"; } $tmp = str_replace("&&php2000mysqlreturn&&","\r\n",chop($message[$k+$numfields-1])); $value .= "‘".$tmp."‘"; $query = "insert into $table values (".$value.")"; echo mysql_error(); mysql_query($query); echo $k." "; } echo "ok"; ?>
使用方法和可能的問(wèn)題! 1 導入時(shí) file()函數可能會(huì )有問(wèn)題(我的10M的數據沒(méi)出現問(wèn)題),可以改為 fopen()然后沒(méi)次讀一行??! 2 導入,導出都需要用 ftp 操作,也就是導出后,用 ftp 把數據轉到本機,導入時(shí)先用ftp轉移數據到服務(wù)器!
| |