サポート » 使い方全般 » $wpdbの仕様について

  • 解決済 dotson

    (@dotson)


    $wpdbの仕様について、コーデックスを読んだ所、インサートする前に
    SQLのエスケープ処理(SQLインジェクション対策として)を実施しようと考えているのですが、$wpdb->insert でこの関数がエスケープを行うという旨の事が記載してありました。

    コーデックスの説明:「$wpdb->insert( $table, (array) $data )
    $data は未エスケープとしてください (この関数がエスケープしてくれます)。配列キーがカラム、配列値がデータベース値になります。」

    実際に$dataに「’,’test’」として処理を実行した所、データベースには「\’,\’test\’」
    のように登録されていますので、これでエスケープ処理が実施されたと考えております。

    しかしながら、wpdb->escapeという関数もあり、事前に$wpdb->escape($data)として$wpdb->insertを実行すると二重にバックスラッシュが挿入され、どうやらおなじような事をしてくれるようなのですが、これらはどのような違いがあるのでしょうか。
    たとえば、一方は$dataの部分のみ検証し、一方はSQL文全体で検証するなどといった違い
    はあるのでしょうか。

    よろしくお願い致します。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    dotsonさん、こんにちは。

    $wpdb->escape では、データに対し再帰処理が行われ、最終的に addslashes がかかります。

    $wpdb->insert では、prepare メソッドを介し、DB接続前であれば、addslashes、接続後であれば、mysql_real_escape_string が、$data に対してかかるようになっていますね。

    双方共に、データに対してエスケープ処理がかかる(insertもSQL文自体はメソッド内で構成されるので)ことは変わりませんが、適用されるエスケープ処理が状況によって変わります。

    なるほど!大変勉強になりました。
    ありがとうございます。
    それと余談ですがWordCamp Osakaでもお世話になりました。
    色々と勉強になりました。ありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「$wpdbの仕様について」には新たに返信することはできません。