アプリ版:「スタンプのみでお礼する」機能のリリースについて

PHP preg_match_all関数の配列をMysqlに格納したい

PHP初心者です。
preg_march_all関数を使って正規表現でマッチングする練習を行っています。
preg_march_allを使った場合、マッチングした結果が多次元配列となって出力されると思うのですが、それらをそれぞれのレコードに分けてMysqlに格納したいと思っています。

php入門サイトのものを弄って作ったのですが、
while (! feof($fp)) {
$s = fgets($fp);
$n = preg_match_all($Pattern, $s, $ar, PREG_SET_ORDER);
for ($i = 0; $i < $n; $i++)
mysql_query("insert into seikihyougen1 (benri) value ('$ar[$i][2]')");
}

結果はマッチングした数のレコード分、benriカラムにArray[2]という文字列が入力されてしまいます。
これらをマッチングした文字列に直してMysqlに入れるにはどうすればよいのでしょうか?

A 回答 (1件)

ダブルクォーテーション内で多次元配列の変数を展開する場合、


どこからどこまでが変数かを示すために波括弧{}で変数を括る必要があります。

mysql_query("insert into seikihyougen1 (benri) value ('{$ar[$i][2]}')");

また、$Patternにはどのようなパターンが記述されているのでしょうか。
特に()で括られた部分がないのであれば、
$ar[$i][2] ではなく $ar[$i][1] ではないでしょうか。
http://php.net/manual/ja/function.preg-match-all …

さらにマッチした文字列を直接SQLに挿入するのは危険なので
mysql_real_escape_string関数などを使ってエスケープを施すべきだと思います。
http://www.php.net/manual/ja/function.mysql-real …
    • good
    • 0
この回答へのお礼

お礼が遅れてしまい申し訳ありませんでした。

>ダブルクォーテーション内で多次元配列の変数を展開する場合、
どこからどこまでが変数かを示すために波括弧{}で変数を括る必要があります。

こんな方法があるとは知りませんでした、まだ勉強不足ですね・・・
また、mysql_real_escape_string関数の件も教えていただきありがとうございました。

お礼日時:2010/05/05 10:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!