9

使用するデータベースに新しい行を追加し、使用$wpdb->insertする行を取得します$wpdb->get_results

問題は$wpdb->insert、入力をエスケープしているように見えることです。たとえば、a"bはデータベースに保存さa\"bれます。しかし、 に$wpdb->get_results戻らないようa\"bですa"b

これは設計上正しい動作ですか?

$wpdb->get_results手動で結果をエスケープ解除する必要がありますか? (これに適切な機能は何ですか?)

4

2 に答える 2

6

$wpdb->insert()SQL インジェクション攻撃を防ぐために$wpdb->prepare()データをエスケープします。この関数は一般的に SQLステートメントで動作するように設計されているため、スラッシュが残されているのは意図的なものだと思います。これにより、データの消費者は必要に応じてデータを処理できます。$wpdb->get_results()SELECT

$wpdb->get_results()関数はオブジェクトの配列を返すため、すべての行のすべての列のスラッシュを削除するには、行を反復処理し、PHP関数をstdClass実行する各行オブジェクトのプロパティを反復処理する必要があります。stripslashes()

foreach( $quotes as &$quote ) {
    foreach( $quote as &$field ) {
        if ( is_string( $field ) )
            $field = stripslashes( $field );
    }
}

wpdb->get_results() 関数の詳細: http://codex.wordpress.org/Class_Reference/wpdb#SELECT_Generic_Results

于 2012-09-12T04:40:55.707 に答える