• 締切済み

表形式のデータを書き込むには?

フォーム形式のデータを1レコードずつ書き込むのはわかるのですが、 表形式のデータ、つまり複数データを一気に書き込むにはどういう 手法があるのでしょうか? 下のようなデータです。 よろしくお願いします。 <table border="1">   <tr><td>ID</td><td>名字</td><td>名前</td><td>年齢</td></tr>   <tr><td>1</td><td>斎藤</td><td>道三</td><td>22</td></tr>   <tr><td>2</td><td>織田</td><td>信長</td><td>33</td></tr>   <tr><td>3</td><td>豊臣</td><td>秀吉</td><td>44</td></tr>   <tr><td>4</td><td>徳川</td><td>家康</td><td>55</td></tr>   <tr><td>5</td><td>松平</td><td>信康</td><td>66</td></tr>   <tr><td>6</td><td>結城</td><td>秀康</td><td>77</td></tr>   <tr><td>7</td><td>徳川</td><td>秀忠</td><td>88</td></tr>   <tr><td>8</td><td>徳川</td><td>家光</td><td>99</td></tr> </table>

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

インジェクション処理はとりあえず最低限しかいれてありませんが 以下のようにすれば、#1さんのデータになります。 <? $str=<<<eof <table border="1"> <tr><td>ID</td><td>名字</td><td>名前</td><td>年齢</td></tr> <tr><td>1</td><td>斎藤</td><td>道三</td><td>22</td></tr> <tr><td>2</td><td>織田</td><td>信長</td><td>33</td></tr> <tr><td>3</td><td>豊臣</td><td>秀吉</td><td>44</td></tr> <tr><td>4</td><td>徳川</td><td>家康</td><td>55</td></tr> <tr><td>5</td><td>松'平</td><td>信康</td><td>66</td></tr> <tr><td>6</td><td>結城</td><td>秀康</td><td>77</td></tr> <tr><td>7</td><td>徳川</td><td>秀忠</td><td>88</td></tr> <tr><td>8</td><td>徳川</td><td>家光</td><td>99</td></tr> </table> eof; $sql=""; $data=Array(); if(preg_match_all("|<tr><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td></tr>|",$str,$matches)){ foreach($matches as $key0=>$vals){ if($key0==0) continue; foreach($vals as $key1=>$val){ if($key1==0) continue; if(!isset($data[$key1])) $data[$key1]=""; else $data[$key1].=","; $data[$key1].="'".mysql_real_escape_string($val)."'"; } } }; $sql="INSERT INTO 表形式テーブル (`ID`,`名字`,`名前`,`年齢`) VALUES"; $sql.="(".implode("),(",$data).")"; print $sql; ?>

wakaranai_kun
質問者

お礼

ありがとうございます。 結果が出ましたら、報告いたします。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>SQL文はわかりますが、上のTABLEをどうやって >SQL文に展開するかがわからないのです。 いわゆるパース処理ですね。 SQLでやることではなく、ミドルウェアやプログラム側の仕事でしょう。 つまりは、テーブル構造を解釈して、それをSQLに書き直すプログラム が必要だということで、具体的な書き方はそれぞれのプログラムに よってことなるので、質問者さんの環境を書かないと回答はできません。

wakaranai_kun
質問者

補足

ありがとうございます。 環境は、、、 Windows XP Pro Apache2.2 MySQL 5.0 PHP 5.02 という感じです。 不足情報は追加いたします。 よろしくお願いします。

回答No.1

個人的にはあんまり使ったことはありませんが、 複数行一括INSERTという構文があります。 INSERT INTO 表形式テーブル (ID, 名字, 名前, 年齢) VALUES(1, '斎藤', '道三', 22), (2, '織田', '信長', 33), (3, '豊臣', '秀吉', 44), (4, '徳川', '家康', 55), (5, '松平', '信康', 66), (6, '結城', '秀康', 77), (7, '徳川', '秀忠', 88), (8, '徳川', '家光', 99);

wakaranai_kun
質問者

補足

ありがとうございます。 SQL文はわかりますが、上のTABLEをどうやって SQL文に展開するかがわからないのです。

関連するQ&A