web-dev-qa-db-ja.com

$ wpdbの代わりにPHP SQL関数を使用できますか?

私はWordPressが初めてであり、WordPress AP​​Iで、prepare()insert()get_col()get_row()query()などの関数を使用するように言っているのはなぜかと疑問に思っていました。 mysqli_query()mysqli_fetch_assoc()などの組み込みのPHP-SQL関数を使用します。

$wpdb SQL関数を使用してクエリを実行する利点は何ですか?

6
blee908

いくつかの異なる理由があります。

1. 懸念の分離

基本的に、あなたの論理的なコード(すなわちあなたのプラグインやあなたのテーマ)はデータベースについて何かを知る必要はないはずです。まったく本当に。

$wpdbオブジェクトはグローバルデータベースアクセスレイヤです、そしてあなたはあなたのデータベースアクセスのすべてのためにそれを使うべきです。もしあなたがカスタムクエリを実行する必要があるなら(あなたがどこかにカスタムテーブルを持っているとしましょう)、あなたはクエリを準備しそしてデータベースからデータをフェッチするために$wpdb->prepare()$wpdb->query()を使うべきです。

2.セキュリティ

クエリをサニタイズしてサイトを何らかのSQLインジェクション攻撃にさらすことを忘れるのはとても簡単です。 WordPressに内蔵されている衛生方法を使用することは、これを防ぐ1つの方法です。それは完璧ではありません(あなたはまだ本当に悪いクエリを書くことができます)が、それは間違いなく助けになります。

3.パフォーマンス

WordPress APIに組み込まれているクエリは、数人の開発者によって流用され、最小のメモリフットプリントで実行してできるだけ早く返すように調整されています。さらに、これらのAPI呼び出しのいくつかは自己キャッシュ式なので、変更されておらず、既にメモリー内にあるデータを "照会"することができます。これは、直接SQL呼び出しを行うことに比べてパフォーマンス上の大きな利点です。

そして、WordPressのすべての新しいバージョンで、私たちは物事をより速く、より機敏にするために変更を加えます。

4.柔軟性と安定性

データベースは固定構成ではありません。テーブルスキーマは を使用でき、 を変更します。あなた自身のコードでWordPressオブジェクトへのハードコーディングされたクエリは柔軟性のないメンテナンスの悪夢です。 WPの新しいバージョンが削除されたら、クエリをもう一度書き直す必要があります。潜在的な脆弱性(#2)にさらされるか、サイトのパフォーマンスに悪影響を及ぼします(#3)。

ボトムライン

PHPはすべてまだ利用できます。必要なデータベースに直接接続したり、必要なクエリを実行したりできます。しかし、WordPressはすでに(ほとんどの場合)重い作業を行っており、これらの要求をあなたのために抽象化しています。

$wpdbを使うことの利点は、それがすでにそこにあり、数人の開発者によって維持され、そしてよく文書化されているということです。あなたは車輪を再発明する必要はありません。そして、あなたが知っている、WordPressが変更された場合、それはあなたのためにそれと一緒に変更されます。

9
EAMann

はい、WordPressでPHPのSQL関数を使うことができます。WordPressはPHPで書かれているので、すべてのPHP関数はプラグインで利用できます。

2番目の質問に答えると、wpdbの主な利点は利便性と安全性です。 wpdbライブラリはたくさんの便利な機能を提供するデータベース抽象化層です。たとえば、wpdb-> insert()およびwpdb-> update()関数を使用するときは、SQLを記述せず、変数の内容をエスケープすることを心配する必要はありません( wpdb-> update() はエスケープされていないはずだと言っています。

Update:wpdbはselect()のような関数内のSQL問い合わせをエスケープしないことに注意すべきです。詳しくは データ検証のDBセクション の記事を読んでください。

Fdsaの応答を詳しく説明するために、wpdbにはクエリ最適化のためのキャッシングが組み込まれています。

wpdbはデータベーステーブルの名前のための便利な変数も提供します。これは、ネットワーク/マルチサイト環境をコーディングするときに非常に役立ちます。

参考のために:公式文書の Class Reference/wpdb