[ruby-list:47294] Re: 改行やタグを含むデータをmysqlでinsertするには

From: Yosuke Suzuki <yosuke.suzuki@...>
Date: 2010-08-11 14:35:29 UTC
List: ruby-list #47294
皆様、様々ご教授いただきありがとうございました。

insert文を組み立てるようなやり方は、危ないということですね。

ちなみに、今回やろうとしていたのは、

def InsertRecord(tablename, hasharray)
略 insert文の組み立てと実行
end

というような関数を作って、
ハッシュ配列に入っているデータをmysqlに入れようと思っていました。

ハッシュ配列はkeyにテーブルのカラム名、valueにそのカラムに入れたいデータという構成です。

このハッシュ配列と対応するテーブルが6セットあり、
それぞれinsert文をかくより、関数を作って、ハッシュ配列を渡して
insert文を組み立てたほうが楽かなと
思ったのですが、こういうやり方よりは、
丁寧にそれぞれinsert文を書いた方がよいのでしょうか。

想定しているデータもとはウェブのフォームではないので、
SQLインジェクションの危険はありません。


ちなみに、教えていただいた以下のような書き方の場合、
executeに配列を渡して、複数のカラムの更新をすることはできないのでしょうか。
st = mysql.prepare('insert into hogetable(hogecolumn) values(?)')
st.execute("A\nB")


2010年8月11日22:49 Moru <lateau@gmail.com>:
> もると申します。
>
> 永遠なビギナーですが。。。
>
> DBによって違うと思いますがhtmlのタグの場合は、まずエスケープをさせた方がいいかも知れません。
> そして、クエリの発行と同時に(その前でも構いません)rubyかDB側でバインドをさせるという感じではないかと思います。
>
> エスケープの場合はDBによってはエラーを吐き出すこともあるので、プログラムの仕様と効率を考えて実装すればいいでしょう。
> postgresなどはtextを挿入する際に頭にEをつけることで、どんなデータでもテキストとしてprefixすることができます。
> 多分、mysqlでも同じような機能はついていると思います。
>
> ご参考までに。
>
> --
> Moru DRS
>
>
>
> 2010/8/11 田口 浩 <h-taguchi@secom.co.jp>:
>> たまーに投稿する田口ともうします。
>>
>> rubyを良く知らないのですが、データをそのまま使って
>> SQL文を組み立てるのは、引用符その他のハンドリングで
>> 大変なだけでなく、SQLインジェクションの温床となりますので、
>> プレースホルダ、とかデータバインドなどと呼ばれる方法を
>> 使ったほうが良いです。
>> SQL文を、
>> insert into hogetable(hogecolumn) values(?)
>> とし、?にデータを指定してSQLを実行します。
>> rubyでのやり方が判りませんが、多くの言語でこれが可能です。
>>
>> --
>> Regards,
>> h-taguchi
>>
>>> -----Original Message-----
>>> From: Yosuke Suzuki [mailto:yosuke.suzuki@gmail.com]
>>> Sent: Wednesday, August 11, 2010 5:27 PM
>>> To: ruby mailing list
>>> Subject: [ruby-list:47290] 改行やタグを含むデータをmysqlでinsertするには
>> ...
>>> このとき、カラムのデータ型がtext型で、「ああああ」となっている部分が
>>> 改行を含む文章のときは、どのように処理するのがよいのでしょうか。
>>> また文章中にはhtmlタグのような文字列も入ってきます。
>>
>>
>



-- 
--------------------------
Yosuke Suzuki
yosuke.suzuki@gmail.com

In This Thread