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

質問があるのですがよろしくお願いします。

現在、SQLインジェクションについて学んでおり、perlのDBIインターフェースを介してデータベースにアクセスする際は、プレースホルダを利用することによって変数をバインドし、SQLインジェクションを防ぐことが出来ることを覚えました。

そこで質問なのですが、PHPでバインドメカニズムを利用することは出来るでしょうか??もし可能であるのなら、どのような記述をすればよいでしょうか??分かる方いらっしゃいましたらご教授よろしくお願いします。

A 回答 (3件)

> PHP「単体」では、perlのようにバインドを使うことは出来ない、と解釈してよろしいのでしょうか??



PEAR::DB=DBI、と思ってください。
いずれも、本体には含まれない追加モジュールですよね。
PEAR::DBもDBIも、バインドAPIが無いDBMS(MySQL4.1より前のバージョンなど)の場合は、擬似的なバインドを行なっています。APIがある場合は、それを利用します。
PHPでは、PEAR::DBを使わなくても、oracle関数やmysqli関数(MySQL4.1以上)を使えば、APIを使ってバインドを使用できます。

以上で、ご質問の回答になっているでしょうか?
    • good
    • 0
この回答へのお礼

回答ありがとうございました!
非常に参考になりましたm(__)m

お礼日時:2006/10/31 23:50

PHP4であればPEARのDB.php、PHP5であればPDOでもほとんど変わらずバインド


できます。
以下PDOの例です。

$db=new PDO('XXXXX'); //XXXX=oci....
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$stt = $db->prepare('INSERT INTO ADDRESS(NAME,TEL) VALUES(?,?)');
$stt->execute(array($name,$tel)); //$nameがはじめの?,$telが2つめの?に入る
    • good
    • 0
この回答へのお礼

回答ありがとうございました!
具体例まで出していただいて、非常に分かりやすかったです。

お礼日時:2006/10/31 23:51

バインドAPIのあるDBMSであれば、PHPでもバインドは使えます。


方法は、DBMSによって異なります。
Oracle、MySQLについては、以下を参照して下さい。
http://www.php.net/manual/ja/function.oci-bind-b …
http://www.php.net/manual/ja/function.mysqli-stm …

PEAR::DBという、DBIのようなDB抽象化レイヤも存在します。
これを使えば、バインドAPIのないDBMSでも、擬似的なバインドを利用できるはずです。

この回答への補足

すいません、聞きたいことがまだあったのに間違えてお礼を投稿してしまいました。
「バインドAPIのあるDBMSであれば、PHPでもバインドは使える。」とのことですが、つまり、PHP「単体」では、perlのようにバインドを使うことは出来ない、と解釈してよろしいのでしょうか??

補足日時:2006/10/29 20:02
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
参考にさせて頂きますm(__)m

お礼日時:2006/10/29 20:00

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