ホームページ  >  記事  >  バックエンド開発  >  Yii 11.17 データベース関連の操作説明

Yii 11.17 データベース関連の操作説明

不言
不言オリジナル
2018-04-28 11:06:101228ブラウズ

この記事では、Yii 11.17 データベースに関連する操作手順を紹介します。必要な友達はそれを参照してください。例:

$result = array(
    'id'=>null,
    'val'=>0
);
$row1 = Yii::app()->db->createCommand()->insert('test1', $result);
$id   = Yii::app()->db->getLastInsertID();
$row2 = Yii::app()->db->createCommand()->update('test1', array('val'=>$id) , 'id=:id',array(':id'=>$id));
echo $id;
exit;

#1。 try...catch を使用すると、スローされる可能性のある例外をキャプチャできます

#$connection=new CDbConnection($dsn,$username,$password);

# DSN 形式
# SQLite: sqlite:/path/to/dbfile
# MySQL: mysql :host=localhost;dbname=testdb
# PostgreSQL: pgsql:host=localhost;port=5432;dbname=testdb
# SQL Server: mssql:host=localhost;dbname=testdb
# Oracle: oci:dbname= //localhost :1521/testdb
# 構成ファイル内のエイリアスを変更します

array(
    'components'=>array(
        'db'=>array(
            'class'=>'CDbConnection',
            'connectionString'=>'mysql:host=localhost;dbname=testdb',
            'username'=>'root',
            'password'=>'password',
            'emulatePrepare'=>true,  // needed by some MySQL installations
        ),
    ),
)

# 次に、このメソッドを使用して接続を確立すると、

$connection = Yii::app()->db

# を通じてデータベース接続にアクセスできるようになります。特に

# CDbConnection::autoConnect を false に設定しない限り、自動的にアクティブ化されます。

# このようにして、この単一の DB 接続をコード内の多くの場所で共有できます。
# そうでない場合は、明示的に接続を確立する必要がある場合があります:
# $connection=new CDbConnection($dsn,$username,$password);

$connection->active=true;  # 建立链接之后active为true;
$connection->active=false;    # 关闭连接

#SQL の実行

$command=$connection->createCommand($sql);

#SQL の変更

$command- >text = $newSQL;

######################################## ## #############
#execute() メソッドは、INSERT、UPDATE、DELETE を実行するために使用されます。
成功した場合は、この実行によって影響を受けた行数が返されます。
#query() メソッドは、SELECT などの複数行のデータを返す SQL ステートメントを実行します。
#成功した場合は、結果のデータ行を走査できる CDbDataReader インスタンスが返されます。
#簡単にするために、(Yii) はクエリ結果を直接返す一連の queryXXX() メソッドも実装します
#SQL エラーが発生した場合、例外がスローされます。 .

$rowCount   =    $command->execute();        # 执行无查询 SQL
$dataReader =    $command->query();          # 执行一个 SQL 查询
$rows       =    $command->queryAll();       # 查询并返回结果中的所有行
$row        =    $command->queryRow();       # 查询并返回结果中的第一行
$column     =    $command->queryColumn();    # 查询并返回结果中的第一列
$value      =    $command->queryScalar();    # 查询并返回结果中第一行的第一个字段

############################################ ## ########

#クエリ結果を取得します

#CDbDataReader を生成した後
#CDbDataReader::read() を繰り返し呼び出します
#foreach 言語構造で CDbDataReader を使用することもできます
####例 # ###

$dataReader = $command->query();

#メソッド 1 false が返されるまで read() を繰り返し呼び出します

while
( ($row = $dataReader->read()) !== false) { ... }# メソッド2 foreach を使用してデータ内の各行を走査します
foreach
($dataReader as $row) { ... }#Method 3 すべての行を一度に配列に抽出します$rows = $dataReader->readAll() ;
#注意:
#すべての queryXXX() メソッドはデータを直接返します
#query() はデータを直接返しません。CDbDataReader のインスタンスを返します
#トランザクションを使用します

$transaction= $connection->beginTransaction();
try
{
    $connection->createCommand($sql1)->execute();
    $connection->createCommand($sql2)->execute();
    #其他
    $transaction->commit();
}
catch(Exception $e) # 如果有一条查询失败,则会抛出异常
{
    $transaction->rollBack(); #回滚
}

######### ## ##########################################

# 前処理 (パラメータ バインディング) ) インジェクションを回避し、反復実行の効率を向上させます

#Placeholder は、名前を付けることも (一意のマークとして表示される)、名前を付けないこともできます (疑問符として表示されます)。プレースホルダーは実際のパラメーターに置き換えられます。
#CDbCommand::bindParam() または CDbCommand::bindValue() を呼び出して、これらのプレースホルダーを実際のパラメーターに置き換えます。
#これらのパラメーターは引用符で囲む必要はありません。SQL ステートメントが実行される前に、基礎となるデータベース ドライバーがこれを処理する必要があります。
#例
#2 つのプレースホルダー「:username」と「:email」を含む SQL

$sql="INSERT INTO tbl_user (username, email) VALUES(:username,:email)";
$command = $connection->createCommand($sql);

#プレースホルダー「:username」を実際のユーザー名に置き換えます

$command->bindParam(":username", $username, PDO::PARAM_STR);

#実際のユーザー名を置き換える 電子メールはプレースホルダー「:」を置き換えますemail"

$command->bindParam(":email",$email,PDO::PARAM_STR);
$command->execute();

#同じロジックを繰り返し実行する場合

#新しいパラメータsetを使用して別の行を挿入する


$command->bindParam(":username",$username2,PDO::PARAM_STR);
$command->bindParam(":email",$email2,PDO::PARAM_STR);
$command->execute();

#bindParam()とbindValue()は非常に似ています。

#唯一の違いは、前者はパラメーターのバインドに PHP 変数を使用するのに対し、

#後者は値を使用することです。メモリ内に大きなデータ ブロックを持つパラメータの場合、パフォーマンス上の理由から、前者を最初に使用する必要があります。
############################################ ## ######
#列をバインドする

$sql="SELECT username, email FROM tbl_user";
$dataReader=$connection->createCommand($sql)->query();

#$username 変数を使用して最初の列 (ユーザー名) をバインドします

$dataReader->bindColumn(1,$username);

#$email 変数を使用して 2 番目の列 (電子メール) をバインドします

$dataReader->bindColumn(2,$email);

while

($dataReader->read()!==false){ #$username と $email には現在の行にユーザー名とメールアドレスが含まれます
#毎回 2 つの変数に値を代入する必要はありません時間
}
############################################# # ########
#テーブル プレフィックスを使用する
#CDbConnection::tablePrefix 属性を目的のテーブル プレフィックスに設定します。

array(
    'components'=>array(
        'db'=>array(
            'class'=>'CDbConnection',
            'connectionString'=>'mysql:host=localhost;dbname=testdb',
            'username'=>'root',
            'password'=>'password',
            'emulatePrepare'=>true,  // needed by some MySQL installations
            'tablePrefix'=>"表前缀_"
        ),
    ),
)
$sql='SELECT * FROM {{user}}';
$users=$connection->createCommand($sql)->queryAll();

#####################

$user = Yii::app()->db->createCommand()
        ->select('username, password')
        ->from('tbl_user')
        ->where('id=:id', array(':id'=>1))
        ->queryRow();

where() メソッド (v1.1.6 以降で利用可能)

public CDbCommand where(mixed $conditions, array $params=array())

$conditions WHERE 部分に配置される混合条件。
$params array このクエリにバインドされたパラメータ (name=>value)
{return} CDbCommand このコマンドオブジェクト自体を返します
クエリの WHERE を設定します。
このメソッドには、クエリにバインドする値を指定する $conditions パラメーターと $params パラメーターが必要です。


$conditions パラメーターは文字列 (「id=1」など) または配列にすることができます。

後者の場合は、array(operator, operand1, operand2, ...) の形式にする必要があります。演算子は次のいずれかになります。使用可能なオペランドは、対応する演算子によって異なります:
および: 操作番号AND を使用して接続する必要があります。
例:
array('and', 'id=1', 'id=2')

'id=1 AND id=2' を生成します。オペランドが配列の場合、ここで説明するのと同じルールを使用して文字列に変換されます。例:
array('and', 'type=1', array('or', 'id=1', 'id=2'))

'type=1 AND (id=1 OR id) を生成します= 2)'
このメソッドは引用符やエスケープを行いません。
or: and 演算子と似ていますが、オペランドが OR を使用して接続される点が異なります。
in: オペランド 1 は列または DB 式である必要があり、オペランド 2 は対応する列または DB 式の値が入る範囲を示す配列である必要があります。
例:
array('in', 'id', array(1,2,3))
'id IN (1,2,3)' を生成します
このメソッドは、列名と変換を正しく参照します値の範囲を意味します。
not in: in と似ていますが、条件を生成するときに IN が NOT IN に置き換えられる点が異なります。
like: オペランド 1 は列または DB 式である必要があり、オペランド 2 は like である必要がある列または DB 式の値を示す文字列または配列です。
例:
array('like', 'name', '%tester%')
は、
"name LIKE '%tester%'"を生成します。
値の範囲が配列として指定される場合、複数のLIKE述語が生成されます。 AND を使用して生成および結合します。
例:
array('like', 'name', array('%test%', '%sample%'))

"name LIKE '%test%' AND name LIKE '%sample%' を生成します"
このメソッドは、列名と範囲のエスケープされた値を正しく引用符で囲みます。
not like: like と似ていますが、条件を生成するときに LIKE の代わりに NOT LIKE が使用される点が異なります。
or like: like と似ていますが、LIKE 述語を接続するために OR が使用される点が異なります。
or not like: not like と似ていますが、NOT LIKE 述語を接続するために OR が使用される点が異なります。

関連する推奨事項:

yii フレームワークの詳細

Yii マルチアプリケーション マルチモジュール

Yii2 構成の基本概念

以上がYii 11.17 データベース関連の操作説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。