ホームページ >PHPフレームワーク >ThinkPHP >ThinkPHP データベース操作ストアド プロシージャ、データ セット、分散データベース
次のチュートリアル コラムでは、ThinkPHP データベース操作のストアド プロシージャ、データ セット、分散データベースについて紹介します。困っている友人の役に立てば幸いです。
# ストアド プロシージャ
5.0 は、A を定義した場合、ストアド プロシージャをサポートします。データベース ストアド プロシージャ sp_query は、次の方法で呼び出すことができます。 $result = Db::query('call sp_query(8)');
は 2 次元配列を返します。または、パラメータ バインディングを使用することもできます。たとえば、
$result = Db::query('call sp_query(?)',[8]); // 或者命名绑定$result = Db::query('call sp_query(:id)',['id'=>8]);
Dataset
データベースのクエリ結果もデータ セットです。デフォルト設定では、データ セットの型は 2 次元配列です。これをデータ セット クラスに構成すると、データ セット上でより多くのオブジェクト ベースの操作をサポートできます。データ セット クラス関数を使用する必要があります。データベースの resultset_type パラメータは次のように構成できます: return [ // 数据库类型
'type' => 'mysql', // 数据库连接DSN配置
'dsn' => '', // 服务器地址
'hostname' => '127.0.0.1', // 数据库名
'database' => 'thinkphp', // 数据库用户名
'username' => 'root', // 数据库密码
'password' => '', // 数据库连接端口
'hostport' => '', // 数据库连接参数
'params' => [], // 数据库编码默认采用utf8
'charset' => 'utf8', // 数据库表前缀
'prefix' => 'think_', // 数据集返回类型
'resultset_type' => 'collection',];
返されるデータ セット オブジェクトは think\Collection です。これは配列を提供し、無差別に使用され、いくつかの追加メソッドもカプセル化します。配列メソッドを直接使用してデータ セット オブジェクトを操作できます。例:
// 获取数据集 $users = Db::name('user')->select(); // 直接操作第一个元素 $item = $users[0]; // 获取数据集记录数 $count = count($users); // 遍历数据集 foreach($users as $user){ echo $user['name']; echo $user['id']; }データ セットが空かどうかを判断したい場合、empty を直接使用して実行することはできないことに注意してください。ただし、データ セット オブジェクトの isEmpty メソッドの判断を使用する必要があります。例:
$users = Db::name('user')->select();if($users->isEmpty()){ echo '数据集为空'; }
Collection クラスには、次のメイン メソッドが含まれます:
個々のデータのみのクエリでデータ セット オブジェクトを返す必要がある場合は、Db::name('user') ->fetchClass('\think\Collection') ->select();分散データベース
# を使用できます。 #ThinkPHP には、マスター/スレーブを含む分散データベースのサポートが組み込まれています。従来のデータベースの読み取りと書き込みの分離ですが、分散データベースは同じデータベース タイプである必要があります。 database.deploy を 1 に設定すると、分散データベース サポートを使用できます。分散データベースを使用する場合、データベース構成情報の定義方法は以下のとおりです。
//分布式数据库配置定义 return [ // 启用分布式数据库 'deploy' => 1, // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => '192.168.1.1,192.168.1.2', // 数据库名 'database' => 'demo', // 数据库用户名 'username' => 'root', // 数据库密码 'password' => '', // 数据库连接端口 'hostport' => '',]接続するデータベースの数はホスト名の定義数に依存するため、同じIPが2つでも繰り返し定義する必要がありますが、その他のパラメータ 同じものがある場合、定義を繰り返す必要はありません (例:
'hostport'=>'3306,3306'と
'hostport'=>'3306'は同等です)。
'username'=>'user1', 'password'=>'pwd1',は
'username'=>'user1,user1', 'password'=>'pwd1,pwd1',と同等です。 分散データベースの読み取りと書き込みを分離するかどうかも設定できます。デフォルトでは、読み取りと書き込みは分離されていません。つまり、各サーバーが読み取りと書き込みの操作を実行できます。マスター/スレーブ データベースの場合, 読み取りと書き込みの操作を設定する必要があります。書き込みの分離は次の設定によって実現できます:
'rw_separate' => true,読み取りと書き込みの分離の場合、デフォルトの最初のデータベース構成はメイン サーバーの構成情報ですmaster_num パラメータが設定されている場合、複数のマスター サーバーへの書き込みをサポートできます。その他はデータベースの構成情報からデータを読み取る役割を担っており、その数に制限はありません。スレーブ サーバーに接続して読み取り操作を実行するたびに、システムはスレーブ サーバーからランダムに選択します。 slave_no を設定して、読み取り操作用のサーバーを指定することもできます。
スレーブデータベース接続エラーが発生した場合は、自動的にマスターデータベース接続に切り替わります。
モデルの CURD 操作を呼び出すと、システムは現在実行されているメソッドが読み取り操作であるか書き込み操作であるかを自動的に判断します。ネイティブ SQL を使用している場合は、注意する必要があります。システムのデフォルトのルール:書き込み操作はモデルの実行メソッドを使用し、読み取り操作はモデルのクエリ メソッドを使用する必要があります
そうしないと、マスター/スレーブの読み取りと書き込みの混乱が発生します。注: マスター/スレーブ データベースのデータ同期作業はフレームワークには実装されていないため、データベースは独自の同期またはレプリケーション メカニズムを考慮する必要があります。
以上がThinkPHP データベース操作ストアド プロシージャ、データ セット、分散データベースの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。