web-dev-qa-db-ja.com

Wpdb prepareを使うべきですか?

私はSQLに不慣れです、そして私が私が作成したテーブルへの次の質問のためにwpdb->prepareを使う必要があるかどうか疑問に思います

global $wpdb;
$tablename = $wpdb->prefix . "my_custom_table";
$sql = "SELECT * FROM " . $tablename . " ORDER BY date_created DESC";
$resulst = $wpdb->get_results( $sql , ARRAY_A );

ここでprepareを使う必要がありますか?どうすればいいの?

乾杯

23
Richard Sweeney

常にprepareを使用するのがベストプラクティスですが、その主な用途はSQLインジェクション攻撃を防ぐことです。ユーザー/訪問者からの入力がないか、クエリに影響を与えられないため、現在の例では問題ありません。 。

しかし、私が先に述べたように、それを使うのがベストプラクティスであり、一度使うと止まることはないので、あなたの例ではあなたはそのように使うことができます:

global $wpdb;
$tablename = $wpdb->prefix . "my_custom_table";
$sql = $wpdb->prepare( "SELECT * FROM %s ORDER BY date_created DESC",$tablename );
$results = $wpdb->get_results( $sql , ARRAY_A );

使い方についてもっと読むには コーデックス に進んでください。

27
Bainternet

Prepareを使用すると、SQLインジェクションの脆弱性からコードが保護されます。

これがprepare()を使うために修正する必要があるコードです。

global $wpdb;
$tablename = $wpdb->prefix . "my_custom_table";
$sql = $wpdb->prepare( "SELECT * FROM {$tablename} ORDER BY date_created DESC");
$resulst = $wpdb->get_results( $sql , ARRAY_A );
0
softnwords

あなたのケースでは不可能です SQLインジェクション攻撃 。 post、get、request、cookieなどのユーザー入力を使用しないため、コードに追加の保護は必要ありません。

サーバーリソースを節約する必要がない場合は、複雑な機能を使用しないでください。

0
SaschArt