MYSQLからphpMyAdminを利用して出力したSQLファイルがあります。
このSQLファイルは以下のようにINSERT文が入っております。
=================================================================
INSERT INTO (・・・・・) VALUES
(1,'データ'),
(2,'データ');
INSERT INTO (・・・・・) VALUES
(1,'データ'),
(2,'データ');
INSERT INTO (・・・・・) VALUES
(1,'データ'),
(2,'データ');
=================================================================
これをフォームのPOST値で受け取り、INSERT文をひとつずつ実行したいと思ってます。
その為に
行頭の「INSERT INTO (」
という文字で分割して配列に格納する方法を教えてください。
よろしくお願いいたします。
この分割し配列に格納する方法を
$_POST['hoge']を受け取って、配列 $ar[1][0], $ar[1][1]... に代入していくプログラムです。
文字コードは utf-8 を前提にしています。
$str = mb_convert_encoding($_POST['hoge'], 'utf-8', 'auto'); //必要なら preg_match_all("/(INSERT INTO.+?;)\n/ims", $str, $ar, PREG_PATTERN_ORDER); //参考 foreach ($ar[1] as $val) echo $val . "<br />\n";
厳密にやろうとすると要素毎に分解するような手間が必要になってきますが、
ご質問のように構造が一定のパターンを示している場合には下記のようにする手などもあります
(正規表現は万能ではないですし、必ずしも効率いいものでも無いです)
<?php // 必要なら事前処理ってのは回答No.1に同じ $str = $_POST['fuga']; // 文字が消えてしまうのが欠点(実行時に補えばいい)の explode を使う方法 $array = explode('INSERT INTO', $str); print_r($array); // 信頼性はまだ低いstr_getcsv(php5.3.0以降に装備)を使う方法 $array = str_getcsv($str, ';', "'"); print_r($array);
引き続き、回答をお待ちしております。