ホームページ  >  記事  >  バックエンド開発  >  PHP は txt ファイルを読み取って SQL を形成し、それをデータベース コードに挿入します (Zjmainstay のオリジナル)_PHP チュートリアル

PHP は txt ファイルを読み取って SQL を形成し、それをデータベース コードに挿入します (Zjmainstay のオリジナル)_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:17:15812ブラウズ

/**
* $splitChar フィールド区切り文字
* $file データファイル ファイル名
* $table データベーステーブル名
* $conn データベース接続
* $fields データに対応する列名
* $insertType INSERT、REPLACE を含む挿入操作タイプ
*/

コードをコピー コードは次のとおりです:

/**
* $splitChar フィールド区切り文字
* $file データ ファイル名
* $table データベース テーブル名
* $conn データベース接続
* $fields データに対応する列名
* $insertType 挿入操作の種類 (INSERT、REPLACE を含む)
*/
function loadTxtDataIntoDatabase($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';
$splitChar = $splitChar; '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) {
return array(false,mysql_error($conn),mysql_errno($conn)); ;
}
}
//呼び出し例 1
require 'db.php';
$splitChar = '|' //垂直バー
$file = 'sqldata1.txt'; ,'parentid','name') ;
$table = 'cengji';
$result =loadTxtDataIntoDatabase($splitChar,$file,$conn,$fields);
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'; ','make','model' ,'year');
$table = 'cars'
$result =loadTxtDataIntoDatabase($splitChar,$file,$conn,$fields); $result)){
echo '成功しました!
';
}else {
echo '失敗しました!--エラー:'.array_shift($result).'
';
/* sqldata2.txt
Aston DB19 2009
Aston DB29 2009
Aston DB39 2009
-- 車
CREATE TABLE `cars` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`make` (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 = ' ' //Tab
$file = 'sqldata3.txt'
$fields = array('id','make','model ','年');
$table = 'REPLACE';
$result =loadTxtDataIntoDatabase($splitChar,$file,$conn,$fields,$insertType); (array_shift($result)){
echo '成功しました!
';
}else {
echo '失敗しました!--エラー:'.array_shift($result).'
' ;
}
/* sqldata3.txt
Aston DB19 2009
Aston DB29 2009
*/
//呼び出し例
require 'db.php';アブ
$ file = 'sqldata3.txt';
$fields = array('id','value');
$table = 'notExist'; //テーブルが存在しません
$result =loadTxtDataIntoDatabase($splitChar,$file, $table,$conn,$fields);
if (array_shift ($result)){
echo '成功!
';
}else {
echo '失敗しました!--エラー:'.array_shift( $result).'
';
}
//添付ファイル: 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("テスト",$connect);
mysql_query(" SET NAMES utf8",$connect);
$db = &$connect;
//*/


データテーブル構造



コードをコピー

コードは次のとおりです:

--データテーブル構造:
-- 100000_insert,1000000_insert
CREATE TABLE `100000_insert` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parentid` int(11) NOT NULL,
`name`変数文字( 255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
100000 (100,000) 行の挿入: 100000_line_data の挿入には 2.5534288883209 秒かかります
10000 00(100万)行挿入:1000000_line_dataを挿入19.677318811417 秒を使用します
//考えられるエラー: MySQL サーバーが消えました
//解決策: my.ini/my.cnf max_allowed_pa​​cket=20M を変更します

Author: Zjmainstay

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/325790.html技術記事 /** * $splitChar フィールド区切り文字* $file データ ファイル ファイル名* $table データベース テーブル名* $conn データベース接続* $fields データに対応する列名* $insertType 挿入操作の種類 (...
を含む)
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。