国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
PHP の Yii フレームワークでのデータベース設定と SQL 操作のサンプル チュートリアル、yii サンプル チュートリアルの使用
您可能感興趣的文章:
ホームページ バックエンド開発 PHPチュートリアル PHP の Yii フレームワークでデータベース設定と SQL 操作を使用するチュートリアルの例、yii サンプル チュートリアル_PHP チュートリアル

PHP の Yii フレームワークでデータベース設定と SQL 操作を使用するチュートリアルの例、yii サンプル チュートリアル_PHP チュートリアル

Jul 12, 2016 am 08:56 AM
mongodb php yii

PHP の Yii フレームワークでのデータベース設定と SQL 操作のサンプル チュートリアル、yii サンプル チュートリアルの使用

データベース アクセス (DAO)
Yii には、PHP PDO 上に構築されたデータ アクセス レイヤー (DAO) が含まれています。DAO は、さまざまなデータベースに統(tǒng)合された API を提供します (MVC の M、Model) は、動的クエリ ステートメントの作成に使用されます。 DAO は、データベースと対話するためにさまざまな場所で使用できる、シンプルで効率的な SQL クエリを提供します。

Yii はデフォルトで次のデータベース (DBMS) をサポートします:

    MySQL
  • マリアDB
  • SQLite
  • PostgreSQL
  • CUBRID: バージョン >= 9.3 (PHP PDO 拡張機能のバグにより、參照値が無効になるため、CUBRID のクライアント側とサーバー側の両方で 9.3 を使用する必要があります)
  • オラクル
  • MSSQL: バージョン>=2005.

構成

データベースの使用を開始するには、まずデータベース接続コンポーネントを構成する必要があります。これは、アプリケーション構成に db コンポーネントを追加することで実現(xiàn)されます (「基本」Web アプリケーションは config/web.php です)。以下に示すように、データベース情報を指定するために使用されるデータ ソース名です。 リーリー

DSN 形式の詳細については、PHP マニュアルを參照してください。 接続コンポーネントを構成した後、次の構文を使用してアクセスできます:

リーリー

設定可能なプロパティのリストについては、yiidbConnection を參照してください。 ODBC 経由でデータベースに接続する場合は、yiidbConnection::driverName 屬性を設定する必要があります。例:

リーリー

注: 複數(shù)のデータベースを同時に使用する必要がある場合は、複數(shù)の接続コンポーネントを定義できます:

リーリー

コード內で使用:

リーリー

データベース接続をグローバル アプリケーション コンポーネントとして定義したくない場合は、コード內で直接初期化できます:

リーリー

ヒント: 接続の作成後に追加の SQL クエリを実行する必要がある場合は、次のコードをアプリケーション構成ファイルに追加できます。

リーリー

SQL を実行してもデータが返されない場合は、コマンドで実行メソッドを使用できます。
リーリー

挿入、更新、削除メソッドを使用できます。これらのメソッドはパラメータに基づいて適切な SQL を生成し、実行します。

リーリー

參照されるテーブル名と列名

ほとんどの場合、テーブル名と列名を安全に參照するには、次の構文を使用します。 リーリー 上記のコードの $column は適切な列名を參照するように変換され、{{table}} は適切なテーブル名を參照するように変換されます。 テーブル名には特別な変數(shù) {{%Y}} があり、テーブル接頭辭が設定されている場合は、このバリアントを使用してテーブル名の前に接頭辭を自動的に追加します:

リーリー

テーブルのプレフィックスが構成ファイルで次のように設定されている場合、上記のコードは tbl_table テーブル內の結果をクエリします。 リーリー

テーブル名と列名を手動で引用するもう 1 つのオプションは、yiidbConnection::quoteTableName() および yiidbConnection::quoteColumnName(): を使用することです。 リーリー

準備されたステートメント

クエリパラメータを安全に渡すには、まず、プレースホルダーを使用して、変數(shù)を対応するプレースホルダーにバインドする必要があります。 リーリー

もう 1 つの使用法は、準備されたステートメントを 1 回準備して、複數(shù)のクエリを実行することです:

リーリー ヒント: 実行前に変數(shù)をバインドし、実行のたびに変數(shù)の値を変更する方が効率的です (通常はループで使用されます)。

ビジネス

複數(shù)の関連するクエリを順番に実行する必要がある場合、データの一貫性を保護するために、それらをトランザクションにカプセル化できます。Yii は、次のように SQL トランザクション クエリ ステートメントを実行するためのシンプルなインターフェイスを提供します。 リーリー

yiidbConnection::beginTransaction() を通じてトランザクションを開始し、try catch を通じて例外をキャッチします。実行が成功すると、トランザクションは送信され、例外が発生して失敗すると、トランザクションは終了します。 yiidbTransaction::rollBack() を通じてロールバックされました。


必要に応じて複數(shù)のトランザクションをネストすることもできます: リーリー 正しく実行するには、使用するデータベースがセーブポイントをサポートしている必要があることに注意してください。上記のコードはすべてのリレーショナル データで実行できますが、セキュリティはセーブポイントをサポートすることによってのみ保証されます。

Yii はトランザクションの分離レベルの設定もサポートしており、トランザクションを実行するときに、データベースのデフォルトの分離レベルが使用されるように、一般的に使用される分離レベルとして次の定數(shù)を指定することもできます。

yiidbTransaction::READ_UNCOMMITTED - 変更されたコミットされていないデータの読み取りを許可します。これにより、ダーティ リード、反復不可能な読み取り、ファントム リードが発生する可能性があります

yiidbTransaction::READ_COMMITTED - 同時トランザクションがコミットされた後の読み取りを許可します。これにより、繰り返し読み取りやファントム読み取りにつながる可能性のあるダーティ読み取りを回避できます。

yiidbTransaction::REPEATABLE_READ - 同じフィールドを複數(shù)回読み取ると一貫した結果が得られ、ファントム読み取りが発生する可能性があります。


yiidbTransaction::SERIALIZABLE - ACID 原則に完全に従って、ダーティ読み取り、反復不能読み取り、ファントム読み取りが発生しないようにします。

  • 上記の定數(shù)を使用するか、文字列コマンドを使用して、対応するデータベースでコマンドを実行して分離レベルを設定できます。たとえば、postgres の有効なコマンドは SERIALIZABLE READ ONLY DEFERRABLE です。

    注意:某些數(shù)據(jù)庫只能針對連接來設置事務隔離級別,所以你必須要為連接明確制定隔離級別.目前受影響的數(shù)據(jù)庫:MSSQL SQLite

    注意:SQLite 只支持兩種事務隔離級別,所以你只能設置READ UNCOMMITTED 和 SERIALIZABLE.使用其他隔離級別會拋出異常.

    注意:PostgreSQL 不允許在事務開始前設置隔離級別,所以你不能在事務開始時指定隔離級別.你可以在事務開始之后調用yii\db\Transaction::setIsolationLevel() 來設置.
    關于隔離級別[isolation levels]: http://en.wikipedia.org/wiki/Isolation_(database_systems)#Isolation_levels

    數(shù)據(jù)庫復制和讀寫分離

    很多數(shù)據(jù)庫支持數(shù)據(jù)庫復制 http://en.wikipedia.org/wiki/Replication_(computing)#Database_replication">database replication來提高可用性和響應速度. 在數(shù)據(jù)庫復制中,數(shù)據(jù)總是從主服務器 到 從服務器. 所有的插入和更新等寫操作在主服務器執(zhí)行,而讀操作在從服務器執(zhí)行.

    通過配置yii\db\Connection可以實現(xiàn)數(shù)據(jù)庫復制和讀寫分離.

    [
      'class' => 'yii\db\Connection',
    
      // 配置主服務器
      'dsn' => 'dsn for master server',
      'username' => 'master',
      'password' => '',
    
      // 配置從服務器
      'slaveConfig' => [
        'username' => 'slave',
        'password' => '',
        'attributes' => [
          // use a smaller connection timeout
          PDO::ATTR_TIMEOUT => 10,
        ],
      ],
    
      // 配置從服務器組
      'slaves' => [
        ['dsn' => 'dsn for slave server 1'],
        ['dsn' => 'dsn for slave server 2'],
        ['dsn' => 'dsn for slave server 3'],
        ['dsn' => 'dsn for slave server 4'],
      ],
    ]
    
    

    以上的配置實現(xiàn)了一主多從的結構,從服務器用以執(zhí)行讀查詢,主服務器執(zhí)行寫入查詢,讀寫分離的功能由后臺代碼自動完成.調用者無須關心.例如:

    // 使用以上配置創(chuàng)建數(shù)據(jù)庫連接對象
    $db = Yii::createObject($config);
    
    // 通過從服務器執(zhí)行查詢操作
    $rows = $db->createCommand('SELECT * FROM user LIMIT 10')->queryAll();
    
    // 通過主服務器執(zhí)行更新操作
    $db->createCommand("UPDATE user SET username='demo' WHERE id=1")->execute();
    
    

    注意:通過yii\db\Command::execute() 執(zhí)行的查詢被認為是寫操作,所有使用yii\db\Command來執(zhí)行的其他查詢方法被認為是讀操作.你可以通過$db->slave得到當前正在使用能夠的從服務器.
    Connection組件支持從服務器的負載均衡和故障轉移,當?shù)谝淮螆?zhí)行讀查詢時,會隨即選擇一個從服務器進行連接,如果連接失敗則又選擇另一個,如果所有從服務器都不可用,則會連接主服務器。你可以配置yii\db\Connection::serverStatusCache來記住那些不能連接的從服務器,使Yii 在一段時間[[yii\db\Connection::serverRetryInterval].內不會重復嘗試連接那些根本不可用的從服務器.

    注意:在上述配置中,每個從服務器連接超時時間被指定為10s. 如果在10s內不能連接,則被認為該服務器已經(jīng)掛掉.你也可以自定義超時參數(shù).
    你也可以配置多主多從的結構,例如:

    [
      'class' => 'yii\db\Connection',
    
      // 配置主服務器
      'masterConfig' => [
        'username' => 'master',
        'password' => '',
        'attributes' => [
          // use a smaller connection timeout
          PDO::ATTR_TIMEOUT => 10,
        ],
      ],
    
      // 配置主服務器組
      'masters' => [
        ['dsn' => 'dsn for master server 1'],
        ['dsn' => 'dsn for master server 2'],
      ],
    
      // 配置從服務器
      'slaveConfig' => [
        'username' => 'slave',
        'password' => '',
        'attributes' => [
          // use a smaller connection timeout
          PDO::ATTR_TIMEOUT => 10,
        ],
      ],
    
      // 配置從服務器組
      'slaves' => [
        ['dsn' => 'dsn for slave server 1'],
        ['dsn' => 'dsn for slave server 2'],
        ['dsn' => 'dsn for slave server 3'],
        ['dsn' => 'dsn for slave server 4'],
      ],
    ]
    
    

    上述配置制定了2個主服務器和4個從服務器.Connection組件也支持主服務器的負載均衡和故障轉移,與從服務器不同的是,如果所有主服務器都不可用,則會拋出異常.

    注意:當你使用yii\db\Connection::masters來配置一個或多個主服務器時,Connection中關于數(shù)據(jù)庫連接的其他屬性(例如:dsn,username, password)都會被忽略.
    事務默認使用主服務器的連接,并且在事務執(zhí)行中的所有操作都會使用主服務器的連接,例如:

    // 在主服務器連接上開始事務
    $transaction = $db->beginTransaction();
    
    try {
      // 所有的查詢都在主服務器上執(zhí)行
      $rows = $db->createCommand('SELECT * FROM user LIMIT 10')->queryAll();
      $db->createCommand("UPDATE user SET username='demo' WHERE id=1")->execute();
    
      $transaction->commit();
    } catch(\Exception $e) {
      $transaction->rollBack();
      throw $e;
    }
    
    

    如果你想在從服務器上執(zhí)行事務操作則必須要明確地指定,比如:

    $transaction = $db->slave->beginTransaction();
    

    有時你想強制使用主服務器來執(zhí)行讀查詢,你可以調用seMaster()方法.

    $rows = $db->useMaster(function ($db) {
      return $db->createCommand('SELECT * FROM user LIMIT 10')->queryAll();
    });
    

    你也可以設置$db->enableSlaves 為false來使所有查詢都在主服務器上執(zhí)行.

    • 操作數(shù)據(jù)庫模式
    • 獲得模式信息

    你可以通過 yii\db\Schema實例來獲取Schema信息:

    $schema = $connection->getSchema();
    

    該實例包括一系列方法來檢索數(shù)據(jù)庫多方面的信息:

    $tables = $schema->getTableNames();
    

    更多信息請參考yii\db\Schema

    修改模式

    除了基礎的 SQL 查詢,yii\db\Command還包括一系列方法來修改數(shù)據(jù)庫模式:

    • 創(chuàng)建/重命名/刪除/清空表
    • 增加/重命名/刪除/修改字段
    • 增加/刪除主鍵
    • 增加/刪除外鍵
    • 創(chuàng)建/刪除索引

    使用示例:

    // 創(chuàng)建表
    $connection->createCommand()->createTable('post', [
      'id' => 'pk',
      'title' => 'string',
      'text' => 'text',
    ]);
    

    完整參考請查看yii\db\Command.

    SQL查詢示例:

    // find the customers whose primary key value is 10
    $customers = Customer::findAll(10);
    $customer = Customer::findOne(10);
    
    // the above code is equivalent to:
    $customers = Customer::find()->where(['id' => 10])->all();
    
    // find the customers whose primary key value is 10, 11 or 12.
    $customers = Customer::findAll([10, 11, 12]);
    $customers = Customer::find()->where(['IN','id',[10,11,12]])->all();
    
    // the above code is equivalent to:
    $customers = Customer::find()->where(['id' => [10, 11, 12]])->all();
    
    // find customers whose age is 30 and whose status is 1
    $customers = Customer::findAll(['age' => 30, 'status' => 1]);
    
    // the above code is equivalent to:
    $customers = Customer::find()->where(['age' => 30, 'status' => 1])->all();
    
    // use params binding
    $customers = Customer::find()->where('age=:age AND status=:status')->addParams([':age'=>30,':status'=>1])->all();
    
    // use index
    $customers = Customer::find()->indexBy('id')->where(['age' => 30, 'status' => 1])->all();
    
    // get customers count
    $count = Customer::find()->where(['age' => 30, 'status' => 1])->count();
    
    // add addition condition
    $customers = Customer::find()->where(['age' => 30, 'status' => 1])->andWhere('score > 100')->orderBy('id DESC')->offset(5)->limit(10)->all();
    
    // find by sql
    $customers = Customer::findBySql('SELECT * FROM customer WHERE age=30 AND status=1 AND score>100 ORDER BY id DESC LIMIT 5,10')->all();
    
    

    修改:

    // update status for customer-10
    $customer = Customer::findOne(10);
    $customer->status = 1;
    $customer->update();
    
    // the above code is equivalent to:
    Customer::updateAll(['status' => 1], 'id = :id',[':id'=>10]);
    
    

    刪除:

    // delete customer-10
    Customer::findOne(10)->delete();
    
    // the above code is equivalent to:
    Customer::deleteAll(['status' => 1], 'id = :id',[':id'=>10]);
    
    

    --------------------------------使用子查詢------------------------------------------

    $subQuery = (new Query())->select('COUNT(*)')->from('customer');
    
    // SELECT `id`, (SELECT COUNT(*) FROM `customer`) AS `count` FROM `customer`
    $query = (new Query())->select(['id', 'count' => $subQuery])->from('customer');
    
    

    --------------------------------手寫SQL-------------------------------------------

    // select
    $customers = Yii::$app->db->createCommand('SELECT * FROM customer')->queryAll();
    
    // update
    Yii::$app->db->createCommand()->update('customer',['status'=>1],'id=10')->execute();
    
    // delete
    Yii::$app->db->createCommand()->delete('customer','id=10')->execute();
    
    //transaction
    // outer 
    $transaction1 = $connection->beginTransaction();
    try {
      $connection->createCommand($sql1)->execute();
    
      // internal
      $transaction2 = $connection->beginTransaction();
      try {
        $connection->createCommand($sql2)->execute();
        $transaction2->commit();
      } catch (Exception $e) {
        $transaction2->rollBack();
      }
    
      $transaction1->commit();
    } catch (Exception $e) {
      $transaction1->rollBack();
    }
    
    

    -----------------------------主從配置--------------------------------------------

    [
      'class' => 'yii\db\Connection',
    
      // master 
      'dsn' => 'dsn for master server',
      'username' => 'master',
      'password' => '',
    
      // slaves
      'slaveConfig' => [
        'username' => 'slave',
        'password' => '',
        'attributes' => [
          // use a smaller connection timeout
          PDO::ATTR_TIMEOUT => 10,
        ],
      ],
    
      'slaves' => [
        ['dsn' => 'dsn for slave server 1'],
        ['dsn' => 'dsn for slave server 2'],
        ['dsn' => 'dsn for slave server 3'],
        ['dsn' => 'dsn for slave server 4'],
      ],
    ]
    
    

    您可能感興趣的文章:

    • PHP的Yii框架中移除組件所綁定的行為的方法
    • PHP的Yii框架中行為的定義與綁定方法講解
    • 詳解在PHP的Yii框架中使用行為Behaviors的方法
    • 深入講解PHP的Yii框架中的屬性(Property)
    • 深入解析PHP的Yii框架中的event事件機制
    • 全面解讀PHP的Yii框架中的日志功能
    • Yii使用find findAll查找出指定字段的實現(xiàn)方法
    • 解析yii數(shù)據(jù)庫的增刪查改
    • Yii PHP Framework實用入門教程(詳細介紹)
    • 詳解PHP的Yii框架中組件行為的屬性注入和方法注入

    www.bkjia.comtru??ehttp://www.bkjia.com/PHPjc/1111911.html技術記事 PHP の Yii フレームワークでデータベース設定と SQL 操作を使用するチュートリアルの例、yii チュートリアルの例 データベース アクセス (DAO) Yii には、PHP PDO 上に構築されたデータ アクセス層 (DAO) が含まれています。 DAO は...
このウェブサイトの聲明
この記事の內容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ファイルアップロードをPHPで安全に処理する方法は? ファイルアップロードをPHPで安全に処理する方法は? Jul 08, 2025 am 02:37 AM

PHPファイルのアップロードを安全に処理するには、ソースとタイプを確認し、ファイル名とパスを制御し、サーバー制限を設定し、メディアファイルを2回プロセスする必要があります。 1.トークンを介してCSRFを防ぐためにアップロードソースを確認し、ホワイトリストコントロールを使用してFINFO_FILEを介して実際のMIMEタイプを検出します。 2。ファイルをランダムな文字列に変更し、検出タイプに従って非WEBディレクトリに保存する拡張機能を決定します。 3。PHP構成は、アップロードサイズを制限し、一時的なディレクトリnginx/apacheはアップロードディレクトリへのアクセスを禁止します。 4. GDライブラリは寫真を再利用して、潛在的な悪意のあるデータをクリアします。

PHPの參照により、値ごとに変數(shù)をどのように渡しますか? PHPの參照により、値ごとに変數(shù)をどのように渡しますか? Jul 08, 2025 am 02:42 AM

inphp、variablySarepassedByValueByDefault、意味することを意味します

PHPヘッダーの場所AJAXコールが機能していません PHPヘッダーの場所AJAXコールが機能していません Jul 10, 2025 pm 01:46 PM

Ajax要求のヘッダー( '場所:...')が無効である理由は、ブラウザがページリダイレクトを自動的に実行しないためです。 AJAXリクエストでは、サーバーによって返される302ステータスコードとロケーションヘッダー情報は、ジャンプ動作をトリガーするのではなく、応答データとして処理されるためです。ソリューションは次のとおりです。1。PHPでJSONデータを返し、ジャンプURLを含みます。 2.フロントエンドのAJAXコールバックのリダイレクトフィールドを確認し、window.location.hrefで手動でジャンプします。 3. PHP出力がJSONのみであることを確認して、障害を解析することを避けます。 4。ドメインを超えた問題に対処するには、適切なCORSヘッダーを設定する必要があります。 5.キャッシュ干渉を防ぐために、タイムスタンプを追加したり、キャッシュを設定したりできます。

発電機はPHPでどのように機能しますか? 発電機はPHPでどのように機能しますか? Jul 11, 2025 am 03:12 AM

ageneratorinphpisamemory-efficientwaytoateate-overdeatatasetasetasetasetsinging valueseintimeintimeturningthemallatonce.1.generatorsususedeywordproducevaluesedemand、memoryusage.2を還元すること。2

PHPは、サブストリングの最後の発生の位置を見つけます PHPは、サブストリングの最後の発生の位置を見つけます Jul 09, 2025 am 02:49 AM

PHPでのサブストリングの最後の発生を見つける最も直接的な方法は、Strrpos()関數(shù)を使用することです。 1。strrpos()関數(shù)を使用して、メイン文字列のサブストリングの最後の発生のインデックスを直接取得します。発見されていない場合、Falseを返します。構文はstrrpos($ haystack、$ edele、$ offset = 0)です。 2.ケースを無視する必要がある場合は、Strripos()関數(shù)を使用して、ケース非感受性検索を実裝できます。 3。中國語などのマルチバイト文字の場合、MBSTRING拡張機能のMB_STRRPOS()関數(shù)を使用して、バイト位置の代わりに文字位置が返されるようにする必要があります。 4. strrpos()がfを返すことに注意してください

Yiiで基本的なルートを作成するにはどうすればよいですか? Yiiで基本的なルートを作成するにはどうすればよいですか? Jul 09, 2025 am 01:15 AM

to cleateabasicrouteinyii、firstsetupacontrollerbyplacingintinthecontrollersdirectory withdirectory andclassdextendinitionextendingingyii \ controller.1)createanactionwithincontrollollerbydefingmethodstartingwith ".2)“ .2)" .2)

PHPでのセッションハイジャックを防ぐ方法は? PHPでのセッションハイジャックを防ぐ方法は? Jul 11, 2025 am 03:15 AM

PHPでのセッションハイジャックを防ぐには、次の測定値をとる必要があります。1。httpsを使用して送信を暗號化し、session.cookie_secure = 1をphp.iniに設定します。 2. HTTPonly、Secure、SamesiteなどのセキュリティCookie屬性を設定します。 3。ユーザーがログインまたはアクセス許可を変更して変更を変更してセッションIDを変更したときにsession_regenerate_id(true)を呼び出します。 4.セッションのライフサイクルを制限し、GC_MAXLIFETIMEを合理的に構成し、ユーザーのアクティビティ時間を記録します。 5。SessionIDをURLに公開することを禁止し、SESSION.USE_ONLYを設定します

PHP文字列の最初のn文字を取得します PHP文字列の最初のn文字を取得します Jul 11, 2025 am 03:17 AM

substr()またはmb_substr()を使用して、phpで最初のn文字を取得できます。特定の手順は次のとおりです。1。substr($ string、0、n)を使用して、ASCII文字に適しており、シンプルで効率的です。 2。マルチバイト文字(中國語など)、MB_Substr($ String、0、n、 'UTF-8')を処理し、MBSTRING拡張機能が有効になっていることを確認します。 3.文字列にhtmlまたはwhitespace文字が含まれている場合、最初にstrip_tags()を使用してタグとtrim()を削除してスペースをきれいにし、結果がきれいであることを確認するためにインターセプトする必要があります。

See all articles