2008年8月 6日

[PHP-users 33941] Re:mysqli_stmt_bind_param の使い方

こんにちは田中です

>> 可変にした時点でprepareの意味がなくなるので。。。
> とありますが、すいません、かなり気になります。
> ちょっとだけでも解説していただけると有難いのですが。
> お願いできませんでしょうか。

prepare自体の目的はSQLの構文解析を先に行っておいて

データだけあとで渡すことで同じSQL構文のINSERTとかの
バッチ処理などで早く処理することができるという利点だと
思います。

最近はそれに加えて安全にSQLを処理するために利用されて
いると思います。

$stmt = $mysqli->prepare("INSERT INTO CountryLanguage VALUES (?, ?, ?, ?)");
$stmt->bind_param('sssd', $code, $language, $official, $percent);

この構文にすることで、SQL自体は確定しており?の場所に代入される
文字や数値はbind_paramで安全に処理されるはずですのであまり
細かいことは気にする必要がないはずです。

prepareのSQLが外部からのパラメータにより変化する場合には安全なSQLか
どうかのチェックが必要になります。

汎用的に利用する場合には、ある程度自分で安全なSQLになるような処理が
必要ですので注意してください。

最近はO/Rマッピングとかを利用する方がスマートかと思います。
設定ファイルが増えるのが難点ですが。。。

http://www.phpied.com/db-2-mdb2/
MDB2のAuto executeとかが利用イメージに近いのではないでしょうか?

MDB2だと配列でのexecuteもできます
ただINSERTのカラム名を埋め込む場合には安全なカラム名かのチェックが
必要になるので、Auto executeの方が安心だと思います。

#変なところあったら突っ込みお願いします!

たなか
_______________________________________________
PHP-users mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2008年8月 6日 09:21
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/75980
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。