使いやすさ
ダイレクトSQLステートメント操作方式を採用。 SQL ステートメントを作成できる限り、その他の学習コストはかかりません。
uctphp フレームワークによって提供される dba 補助カプセル化クラスは、一度使用するとやめられなくなります。
使用前に明示的に初期化してデータベースに接続する必要がありますか? もちろん必要ありません。
最初の SQL ステートメントが実行されるまで、データベースに接続されず、新しい db オブジェクトも作成されません。
dba は適切なタイミングでデータベースに接続し、最初の文字エンコード操作を実行します。
クエリステートメント。新しいクエリ コンストラクターは必要なく、非常に複雑で非効率な連鎖操作メソッドも提供しません。
dba は以下のクエリ補助関数を提供します。
1 2 3 4 5 6 7 8 9 10 11 12 |
//读一个值
Dba::readOne( $sql );
//读一行
Dba::readRowAssoc( $sql );
//读所有行
Dba::readAllAssoc( $sql );
//读所有行的第一列
Dba::readAllOne( $sql );
//在实际业务场景中,经常会有分页读取部分数据的情况。
//只要一个函数即可返回指定页码的数据内容和数据总条数
Dba::readCountAndLimit( $sql , $page , $limit );
|
追記: 上記の関数の一部は、返された配列の各行を処理するマップ関数を提供できます。
文章を書きます。なぜ読み取りと書き込みを区別する必要があるのでしょうか? 明らかに、読み取りと書き込みの分離、二重書き込み、その他の機能を制御するために拡張できます。
現在、さまざまなクラウド データベースやデータベース ミドルウェアが存在するため、データベース層での実装がより良い選択となります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Dba::write( $sql );
/* 直接插入或更新kv形式的array数组
会自动对value进行转义,也支持array类型的值。
如果自己写sql语句要注意使用addslashes或mysql_real_escape_string来保证安全
*/
Dba::insert( $table , $insert );
Dba::update( $table , $update , $where );
/*
对批量插入数据有更高的效率
当然过多的行数应该用array_chunk来分批插入。
*/
Dba::insertS( $table , $inserts );
|
2. 事務
PDO を使用してトランザクションをサポートする
1 2 3 |
Dba::beginTransaction();
Dba::commit();
Dba::rollBack();
|
3. 長時間のランニング
swoole サービス、バックグラウンド ワーカーなどの長時間実行操作が必要な一部のシナリオでは、データベース接続がタイムアウトになる可能性があります。
データベース接続がタイムアウトしたことが判明すると、DBA は自動的に再接続を試みます。