• ベストアンサー

PHPでバインドメカニズムを使えるか??

質問があるのですがよろしくお願いします。 現在、SQLインジェクションについて学んでおり、perlのDBIインターフェースを介してデータベースにアクセスする際は、プレースホルダを利用することによって変数をバインドし、SQLインジェクションを防ぐことが出来ることを覚えました。 そこで質問なのですが、PHPでバインドメカニズムを利用することは出来るでしょうか??もし可能であるのなら、どのような記述をすればよいでしょうか??分かる方いらっしゃいましたらご教授よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

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

miraikako
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • dai1113
  • ベストアンサー率16% (1/6)
回答No.3

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つめの?に入る

miraikako
質問者

お礼

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

すると、全ての回答が全文表示されます。
回答No.1

バインドAPIのあるDBMSであれば、PHPでもバインドは使えます。 方法は、DBMSによって異なります。 Oracle、MySQLについては、以下を参照して下さい。 http://www.php.net/manual/ja/function.oci-bind-by-name.php http://www.php.net/manual/ja/function.mysqli-stmt-bind-param.php PEAR::DBという、DBIのようなDB抽象化レイヤも存在します。 これを使えば、バインドAPIのないDBMSでも、擬似的なバインドを利用できるはずです。

miraikako
質問者

お礼

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

miraikako
質問者

補足

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

すると、全ての回答が全文表示されます。

関連するQ&A