0

データベースにクエリを実行するには、次の 2 つの方法を検討してください。

フレームワーク (Yii) の場合:

$user = Yii::app()->db->createCommand()
->select('id, username, profile')
->from('tbl_user u')
->join('tbl_profile p', 'u.id=p.user_id')
->where('id=:id', array(':id'=>$id))
->queryRow();

文字列連結 (SQL ステートメントの個々の部分を分離する) を使用する場合:

$columns = "id,username,profile"; // or =implode(",",$column_array);
//you can always use string functions to wrap quotes around each columns/tables
$join = "INNER JOIN tbl_profile p ON u.id=p.user_id";
$restraint = "WHERE id=$id ";//$id cleaned with intval()
$query="SELECT $columns FROM tbl_user u {$restraint}{$join}";
//use PDO to execute query... and loop through records...

ページネーションのための文字列連結の例:

$records_per_page=20;
$offset = 0;
if (isset($_GET['p'])) $offset = intval($_GET['p'])*$records_per_page;
Squery="SELECT * FROM table LIMIT $offset,$records_per_page";

どちらの方法がより優れたパフォーマンスを発揮しますか?

  • PHP の PDO を使用すると、コードをさまざまなデータベースに移植できます
  • 2番目のメソッドは関数でラップできるため、コードが繰り返されることはありません。
  • 文字列連結により、複雑な SQL ステートメントをプログラムで (文字列を操作して) 構築できます。
4

1 に答える 1

2

あなたとあなたのプロジェクトチームに適したものを使用してください。フレームワークは理由のために書かれているので、適切な場合はそれらを使用しますが、そうでない場合(そしてそうでない理由がある場合)は失敗します。

Yiiはわかりませんが、多くのフレームワークを見ると、1日の終わりにパーツから文字列クエリを作成するだけで、パラメータ化を利用できればと思いますが、常にそうとは限りません。したがって、速度に関しては、文字列連結がおそらく「最速」ですが、ストップウォッチとの違いを実際に確認することはほとんどありません(1000クエリで必要な場合はベンチマークできますが、エラーチェックやキャッシュの改善などの他の機能は不当に行われる可能性があります結果を遅くするか速くします)。

ただし、フレームワークの利点の1つは、コンテキスト依存のキャッシュを追加し、テーブルXを更新するときに、A、D、およびFのキャッシュをクエリすることを削除する必要があることを認識できることですが、クエリB、C、およびEはすべて良好です。

また、「読みやすい」「デバッグ」「機能性」も気になります。上の例ははるかに読みやすく、共有プロジェクトでは重要です。

プリペアドステートメントも考慮する必要があります-フレームワークはそれらを使用しますか?もしそうなら、それはあなたがそれらを再利用することを可能にしますか(単に構文目的でそれらを使用するのではなく)。

しかし、フレームワークは副選択を行うことができますか?「JOINON」内でパラメータ化できますか?そうでない場合は、PDOとの文字列連結の方が適切な場合があります。

それは難しい答えではありませんが、うまくいけば、考慮する必要のあるすべてのポイントを提供します。

推奨事項:フレームワークが遅いことに本当に気付いた場合、メモリを使いすぎている場合、または他にそうしない正当な理由がある場合を除いて、フレームワークを使用してください。

于 2012-08-27T06:20:38.077 に答える