-
-
/** - * $splitChar フィールド区切り文字
- * $file データファイル ファイル名
- * $table データベーステーブル名
- * $conn データベース接続
- * データに対応する $fields 列名
- * $insertType INSERT、REPLACE を含む挿入操作タイプ
- * 収集と組織: bbs.it-home.org
- */
- 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));
- if(preg_replace('/s*/i','',$splitChar) == '') {
- $splitChar = '/(w+)(s+)/i';
- $replace = "$1',' ";
- $specialFunc = 'preg_replace';
- }else {
- $splitChar = $splitChar;
- $replace = "','";
- $specialFunc = 'str_replace';
- }
- //データ本体の処理、両方順序は変更できません。そうしないと、スペースまたはタブ区切り文字を使用するときにエラーが発生します
- $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';
- $ SplitChar = '|'; //垂直バー
- $file = 'sqldata1.txt';
- $fields = array('id','parentid','name');
- $table = ' cengji';
- $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');
- $table = 'cars ';
- $result =loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields);
- if (array_shift($result)){
- echo '成功!
- }else {
- echo '失敗!--エラー:'.array_shift($result).'
';
- }
- /* sqldata2.txt
- Aston DB19 2009
- Aston 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,
- PRIMARY KEY (`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';
- $insertType = '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';
- $splitChar = ' '; //Tab
- $file = 'sqldata3.txt';
- $fields = array('id', 'value');
- $table = 'notExist'; //テーブルが存在しません
- $result =loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields);
- if (array_shift($result)) {
- echo '成功!< ;br/>';
- }else {
- echo '失敗!--エラー:'.array_shift($result).'
';
- }
/ /Attachment: db.php
- /* //すべてを解放するにはこの行をコメント化します
- ?>
- static $connect = null;
- static $table = 'jilian';
- if(!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;
- $db = &$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) 行の挿入: 100000_line_data の使用 2.5534288883209 秒 1000000 (100 万) 行の挿入: 1000000_line_data の使用 19.6773 1 8811417 秒
- //考えられるエラー: MySQL サーバーが停止しました離れています
- //解決策: my.ini/my.cnf を変更します max_allowed_packet=20M
-
-
コードをコピー
Author: Zjmainstay
|