次のチュートリアル コラムでは、ThinkPHP データベース操作のストアド プロシージャ、データ セット、分散データベースについて紹介します。困っている友人の役に立てば幸いです。
# ストアド プロシージャ
5.0 は、A を定義した場合、ストアド プロシージャをサポートします。データベース ストアド プロシージャ sp_query は、次の方法で呼び出すことができます。 $result = Db::query('call sp_query(8)');
$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',];
// 获取数据集 $users = Db::name('user')->select(); // 直接操作第一个元素 $item = $users[0]; // 获取数据集记录数 $count = count($users); // 遍历数据集 foreach($users as $user){ echo $user['name']; echo $user['id']; }
$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' => '',]
'hostport'=>'3306,3306'
'hostport'=>'3306'
'username'=>'user1', 'password'=>'pwd1',
'username'=>'user1,user1', 'password'=>'pwd1,pwd1',
'rw_separate' => true,
スレーブデータベース接続エラーが発生した場合は、自動的にマスターデータベース接続に切り替わります。
モデルの CURD 操作を呼び出すと、システムは現在実行されているメソッドが読み取り操作であるか書き込み操作であるかを自動的に判断します。ネイティブ SQL を使用している場合は、注意する必要があります。システムのデフォルトのルール:書き込み操作はモデルの実行メソッドを使用し、読み取り操作はモデルのクエリ メソッドを使用する必要があります
そうしないと、マスター/スレーブの読み取りと書き込みの混乱が発生します。注: マスター/スレーブ データベースのデータ同期作業はフレームワークには実装されていないため、データベースは独自の同期またはレプリケーション メカニズムを考慮する必要があります。
以上がThinkPHP データベース操作ストアド プロシージャ、データ セット、分散データベースの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。