ThinkPHP データベース操作ストアド プロシージャ、データ セット、分散データベース

藏色散人
リリース: 2021-02-03 18:49:33
転載
2247 人が閲覧しました

次のチュートリアル コラムでは、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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!