/**
* $splitChar フィールド区切り文字
* $file データ ファイル ファイル名
* $table データベース テーブル名
* $conn データベース接続
* $fields データに対応する列名
* $insertType 挿入操作タイプ (INSERT、REPLACE を含む)
*/
コードをコピー コードは次のとおりです:
/**
* $splitChar フィールド区切り文字
* $file データ ファイル ファイル名
* $table データベース テーブル名
* $conn データベース接続
* $fields データに対応する列名
* $insertType 挿入操作タイプ (INSERT、REPLACE を含む)
*/
functionloadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields=array(),$insertType='INSERT'){
if(empty($fields) )) $ head = "{$insertType} INTO `{$table}` VALUES('";
else $head = "{$insertType} INTO `{$table}`(`".implode('`, `', $fields)."`) VALUES('"; //データヘッダ
$end = "')"
$sqldata = トリム(file_get_contents($file)); preg_replace(' /s*/i','',$splitChar) == '') {
$splitChar = '/(w )(s )/i';
$replace = "$1'; '";
$specialFunc = 'preg_replace';
}else {
$splitChar = $splitChar;
$replace = "','";
$specialFunc = 'str_replace';
}
//データ本体の処理では、2 つの順序を入れ替えることはできません。そうしないと、スペースまたはタブ区切り文字を使用するとエラーが発生します。
$sqldata = preg_replace('/(s*)(n )(s*)/i',' '),('',$sqldata); //改行を置換
$sqldata = $specialFunc($splitChar,$replace,$sqldata); //区切り文字を置換>$query = $head.$sqldata .$end; //データのスプライシング
if(mysql_query($query,$conn)) return array(true);
else {
return array(false, mysql_error($conn),mysql_errno($ conn));
}
}
//呼び出し例 1
require 'db.php'; /垂直バー
$file = 'sqldata1.txt';
$fields = array('id','parentid','name'); result = loadTxtDataIntoDatabase($splitChar,$file ,$table,$conn,$fields);
if (array_shift($result)){
echo '成功!
'; }else {
echo '失敗しました !--エラー:'.array_shift($result).'
';
}
/*sqlda ta1.txt
|0| A
|1|B
|1|C
|2|D
-- cengji
CREATE TABLE `cengji` (
`id` int(11) NOT NULL AUTO_INCREMENT 、
`parentid` int( 11) NOT NULL、
`name` varchar(255) DEFAULT NULL、
PRIMARY KEY (`id`)、
UNIQUE KEY `parentid_name_unique` (`parentid` ,`name`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1602 DEFAULT CHARSET=utf8
*/
//呼び出し例 2
require 'db.php';
$splitChar = ' '; //space
$file = 'sqldata2.txt';
$fields = array('id','make','model','year');車';
$result =loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields);
if (array_shift($result)){
echo '成功!
';
}else {
echo '失敗しました!--エラー:'.array_shift($result).'
';
}
/* sqldata2.txt
アストン DB19 2009
アストン DB29 2009
アストン DB39 2009
-- 車
CREATE TABLE `cars` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`make` varchar(16) NOT NULL 、
`model` varchar(16) DEFAULT NULL、
`year` varchar(16) DEFAULT NULL、
主キー (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET= utf8
*/
//呼び出し例 3
require 'db.php';
$splitChar = ' '; $file = 'sqldata3.txt';
$fields = array('id','make','model','year');
$table = 'cars'; 'REPLACE';
$result =loadTxtDataIntoDatabase ($splitChar,$file,$table,$conn,$fields,$insertType);
if (array_shift($result)){
echo '成功!
';
}else {
echo '失敗しました!--エラー:'.array_shift($result).'
}
/ * sqldata3.txt
Aston DB19 2009
Aston DB29 2009
Aston DB39 2009
*/
//呼び出し例 3
require 'db.php'; = ' '; //Tab
$ file = 'sqldata3.txt';
$fields = array('id','value'); //テーブルは次のようになります。存在しません
$result =loadTxtDataIntoDatabase($splitChar ,$file,$table,$conn,$fields);
if (array_shift($result)){
echo 'Success!
}else {
echo '失敗しました!--エラー:'.array_shift($result).'
'
}
//添付ファイル: db. php
/* //この行をコメント化します
?>
static $connect = null
static $table = 'jilian'; (!isset($connect)) {
$connect = mysql_connect("localhost","root","");
if(!$connect) {
$connect = mysql_connect("localhost") ,"Zjmainstay","");
}
if(!$connect) {
die('データベースに接続できません。/test/db.php による致命的なエラー処理'); >}
mysql_select_db("test", $connect);
mysql_query("SET NAMES utf8",$connect);
$conn = &$connect;
}
?>
//*/
データテーブル構造
コードをコピー
コードは次のとおりです:
--データテーブル構造:
-- 100000_insert,1000000_insert
CREATE TABLE `100000_insert` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parentid` int (11) NOT NULL、
`name` varchar(255) DEFAULT NULL、
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
100000 (100,000 )行挿入: Insert 100000_line_data use 2.5534288883209 秒
1000000 (100万) 行挿入: Insert 1000000_line_data use 19.677318811417 秒
//考えられるエラー: MySQL サーバーが消えました
//解決策: ini/my を変更します。 .cnf max_allowed_packet=20M