この記事では、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;
# 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
# このようにして、この単一の DB 接続をコード内の多くの場所で共有できます。
# そうでない場合は、明示的に接続を確立する必要がある場合があります:
# $connection=new CDbConnection($dsn,$username,$password);
$connection->active=true; # 建立链接之后active为true;
$connection->active=false; # 关闭连接
$command=$connection->createCommand($sql);
######################################## ## #############
#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();
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);
$command->bindParam(":username", $username, PDO::PARAM_STR);
$command->bindParam(":email",$email,PDO::PARAM_STR); $command->execute();
$command->bindParam(":username",$username2,PDO::PARAM_STR); $command->bindParam(":email",$email2,PDO::PARAM_STR); $command->execute();
#後者は値を使用することです。メモリ内に大きなデータ ブロックを持つパラメータの場合、パフォーマンス上の理由から、前者を最初に使用する必要があります。
############################################ ## ######
#列をバインドする
$sql="SELECT username, email FROM tbl_user"; $dataReader=$connection->createCommand($sql)->query();
$dataReader->bindColumn(1,$username);
$dataReader->bindColumn(2,$email);
($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();
$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 11.17 データベース関連の操作説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。