アップロードされたテキスト ファイルを処理し、データを MySQL テーブルにインポートする完成した PHP スクリプトがあります。
テキスト ファイルがアップロードされるたびに:
- 既存のテーブルは削除されます
- 同じ名前で新しいテーブルが作成されます
- すべての新しいデータが新しいテーブルに挿入されます。
テキスト ファイルは、このプロセスの理由である会社の社内データベース ソフトウェアによって作成されます。
テキスト ファイル内のフィールド/値はバックスラッシュで区切られており、スクリプトはこれを正常に展開します。
$this_array = explode("\\", $this_string);
次に、各行の末尾にある改行を探して、配列のその部分を終了します (配列のその部分の末尾は、データベース行の末尾になります)。例えば。サンプル テキスト ファイル (以下) では、改行は の後に来'Row1Data for colname4'
ます。配列のその部分は、データベース テーブルの行になります。
ただし、問題は、スクリプトが次のエラーを吐き出していることです。
Error #1136:Column count doesn't match value count at row 1
これは、テキスト ファイル内の複数の段落の末尾に改行があるために発生します (以下のテキスト ファイルの例を参照)。
問題: 段落の末尾が行の末尾または配列の一部として解釈されるのを回避する方法がわかりません。配列のその部分の最後として解釈されることなく、テキストの複数の段落でこのプロセスを使用し続けるにはどうすればよいですか?
テキスト ファイルの内容の例:
colname1name\colname2name\colname3name\colname4name
Data for colname1\Row1Data for colname2\This is a Row1 Paragraph to go in colname3
This is another Row1 Paragraph to go in colname3
This is yet another Row1 Paragraph to go in colname3\Row1Data for colname4
Row2Data for colname1\Row2Data for colname2\This is a Row2 Paragraph 1 to go in colname3
This is another Row2 Paragraph to go in colname3
This is yet another Row2 Paragraph to go in colname3\Row2Data for colname4
スクリプトには多くのコードがありますが、これが最も関連性の高い部分だと思います。
//
//---------------------------------------create table--------------------------------
//
$text_string="CREATE TABLE `area` (";
//loop thru names
for ($n=0; $n< count($name_array); $n++){
$name_array[$n]=trim($name_array[$n]);//trim needed here
if($name_array[$n]=='population'){//population field has to be INT
$text_string.= "`".$name_array[$n]."` INT(8) NOT NULL,";
}elseif($name_array[$n]=='towndescription'){//description field has to be TEXT
$text_string.= "`".$name_array[$n]."` TEXT NOT NULL,";
}else{
$text_string.= "`".$name_array[$n]."` varchar(250) NOT NULL default '',";
}
}
//remove last comma
$string_len=strlen($text_string);
$string_len=$string_len-1;
$text_string=substr($text_string,0,$string_len);
//
$text_string.= ") ENGINE=MyISAM ";
$db_sql_query = $text_string;
$db_result = @mysql_query($db_sql_query, $db_connection) or die ("Error #" . mysql_errno() . ":" . mysql_error());
print $text_string."<BR><BR>";//////////
//
//----------------------------------------------------------------------------------------
//
//now loop thru $array
//
for ($n=1; $n<count($array) ; $n++){
$text_string= "INSERT INTO `area` VALUES (";
//for each line explode
$this_string=$array[$n];
$this_array = explode("\\", $this_string);
for ($i=0; $i< count($this_array); $i++){
//replace ' with html code - ’
$this_item=$this_array[$i];
$this_item=trim($this_item);//trim needed here
$this_item = str_replace("&", "and","$this_item" );
$this_item = str_replace("'", "’","$this_item" );
$this_item = str_replace("\"", "","$this_item" );//escaped "
//$this_item = str_replace(" ", "%20","$this_item" );
$text_string.= " '".$this_item."' ,";
}
//remove last comma
$string_len=strlen($text_string);
$string_len=$string_len-1;
$text_string=substr($text_string,0,$string_len);
//
$text_string.= ") ";
$db_sql_query = $text_string;
$db_result = @mysql_query($db_sql_query, $db_connection) or die ("Error #" . mysql_errno() . ":" . mysql_error());
print $text_string;//////////
}
どんな助けでも大歓迎です!