- 締切済み
表形式のデータを書き込むには?
フォーム形式のデータを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>
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
インジェクション処理はとりあえず最低限しかいれてありませんが 以下のようにすれば、#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; ?>
- yambejp
- ベストアンサー率51% (3827/7415)
>SQL文はわかりますが、上のTABLEをどうやって >SQL文に展開するかがわからないのです。 いわゆるパース処理ですね。 SQLでやることではなく、ミドルウェアやプログラム側の仕事でしょう。 つまりは、テーブル構造を解釈して、それをSQLに書き直すプログラム が必要だということで、具体的な書き方はそれぞれのプログラムに よってことなるので、質問者さんの環境を書かないと回答はできません。
補足
ありがとうございます。 環境は、、、 Windows XP Pro Apache2.2 MySQL 5.0 PHP 5.02 という感じです。 不足情報は追加いたします。 よろしくお願いします。
- copymaster
- ベストアンサー率81% (83/102)
個人的にはあんまり使ったことはありませんが、 複数行一括INSERTという構文があります。 INSERT INTO 表形式テーブル (ID, 名字, 名前, 年齢) VALUES(1, '斎藤', '道三', 22), (2, '織田', '信長', 33), (3, '豊臣', '秀吉', 44), (4, '徳川', '家康', 55), (5, '松平', '信康', 66), (6, '結城', '秀康', 77), (7, '徳川', '秀忠', 88), (8, '徳川', '家光', 99);
補足
ありがとうございます。 SQL文はわかりますが、上のTABLEをどうやって SQL文に展開するかがわからないのです。
お礼
ありがとうございます。 結果が出ましたら、報告いたします。