2009年4月10日金曜日
サニタイジングとは言わないけど

困った困った。

まぁ、基本的に無知なのがいけないんだけどさ。

誰もいなかったから僕がやったっていう発端もどうかって話だけどさ。
それなりにPGできるから、かえっていけなかったね。
たいして知りもしないで、作るものではないってことで。
知ってる人がほとんどいないって時点で、救いの手はどこに求めたらいいのか判らないという…


ユーザの入力に対して、チェックを入れたりするんだけど、これがどーもよく判らなくて。
最初に参考にした本が、SQLにINSERTするための処理として、htmlspecialchars()とmysql_real_escape_string()をかましてたもんだから、そういうもんかと思って…

結局htmlsp(ry は表示の前にやるのがいいというのは、納得できた。
たしかにDBには生のデータ(実際にはエスケープされてるけど)を入れるべきだろうな。

入力

確認表示(表示用にhtmlspecialchars()を入れるけど、実際のデータはそのまま)

登録(INSERTする段階でエスケープ)

リクエスト

表示(DBから引っ張ってきたエスケープ済みの内容をhtmlspcialchars()で表示)

こういうこと?



0 コメント | コメントを書く | コメントの表示
2009年4月6日月曜日
プリペアードクエリ

PHP+PostgreSQLについてのメモ。

本当は、pg_prepareとか使えるといいんだけど、今の環境がPHPのバージョンが5じゃないので
、仕方なく…

pg_query($db, "PREPARE sample (text) AS SELECT hoge FROM hoge_tbl WHERE col_hoge=$1");
$result = pg_query($db, "EXECUTE sample ('{$number}')");
pg_query($db, "DEALLOCATE sample");


まぁ、「PREPARE」でクエリを作成するんだけど、ここで指定する変数の型(ASの前に括弧書きしてるヤツね)が曲者で(自分の確認が不十分なのを責任転嫁)、「EXECUTE」の時に入れる変数の値がintってことに全然気が付かなくて、エライ大変な思いをしたものです。



0 コメント | コメントを書く | コメントの表示
シェルスクリプトとMySQL

忘れないように、メモ。

シェルスクリプトとSQLの合体。

フツーにSQLを実行するの場合は…

mysql -u ユーザ名 --password='パスワード' データベース名<< EOF
SQL文
exit
EOF

ってことで。

で、実行結果を取得したい場合は
RESULT=`mysql -u ユーザ名 --password='パスワード' データベース名<< EOF
SQL文
exit
EOF`

と、コマンドの実行時と同じく「`」で括っておしまい。

SELECTの場合なんかでカラム名まで取得されちゃうので、
RESULT=`mysql -N -u ユーザ名 --password='パスワード' データベース名<< EOF
SQL文
exit
EOF`

と「mysql」に「-N」オプションを付ける。



0 コメント | コメントを書く | コメントの表示
Template Design: © 2007 Envy Inc.