이 글에서는 특정 참조 가치가 있는 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; # 关闭连接
#Run 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) { ... }
#방법 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(); #回滚 }
######### ## #######################################
# 전처리(매개변수 바인딩 )는 주입을 방지하고 반복 실행의 효율성을 향상시킵니다.
#자리 표시자는 이름을 지정하거나(고유 표시로 표시) 이름을 지정하지 않을 수 있습니다(물음표로 표시). 자리 표시자는 실제 매개변수로 대체됩니다.
#CDbCommand::bindParam() 또는 CDbCommand::bindValue()를 호출하여 이러한 자리 표시자를 실제 매개변수로 바꿉니다.
#이러한 매개변수는 따옴표로 묶을 필요가 없습니다. 기본 데이터베이스 드라이버가 이를 처리하므로 SQL 문이 실행되기 전에 매개변수 바인딩이 완료되어야 합니다.
#예
#두 개의 자리 표시자 ":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();
#동일한 로직을 반복적으로 실행하는 경우
#새 매개변수 세트를 사용하여 다른 행 삽입
$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 변수를 사용하여 첫 번째 열(username)을 바인딩합니다
$dataReader->bindColumn(1,$username);
#$email 변수를 사용하여 두 번째 열(email)을 바인딩합니다
$dataReader->bindColumn(2,$email);
while($dataReader->read()!==false)
{
#$username 및 $email에는 현재 줄의 사용자 이름과 이메일이 포함됩니다
#매번 두 변수에 값을 할당할 필요가 없습니다.
}
######################################## ## #######
#테이블 접두사 사용
#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(혼합 $조건, 배열 $params=array())
$conditions WHERE 부분에 혼합 조건이 배치되었습니다.
$params array 이 쿼리에 바인딩된 매개변수(이름=>값)
{return} CDbCommand 이 명령 개체 자체를 반환합니다.
쿼리의 WHERE를 설정합니다.
이 방법에는 쿼리에 바인딩할 값을 지정하는 $conditions 매개변수와 $params 매개변수가 필요합니다.
$conditions 매개변수는 문자열(예: 'id=1') 또는 배열일 수 있습니다.
후자의 경우 배열 형식(연산자, 피연산자1, 피연산자2, ...)이어야 하며 연산자는 다음 중 하나일 수 있으며 가능한 피연산자는 해당 연산자에 따라 다릅니다.
및: 연산 번호 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: 피연산자가 OR를 사용하여 연결된다는 점을 제외하면 and 연산자와 유사합니다.
in: 피연산자 1은 열 또는 DB 표현식이어야 하고, 피연산자 2는 해당 열 또는 DB 표현식의 값이 있어야 하는 범위를 나타내는 배열이어야 합니다.
예:
array('in', 'id', array(1,2,3))
는 'id IN (1,2,3)'을 생성합니다.
이 메서드는 열 이름과 변환을 올바르게 참조합니다. 범위는 값을 의미합니다.
not in: 조건 생성 시 IN이 NOT IN으로 대체된다는 점을 제외하면 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 대신 NOT LIKE가 사용된다는 점을 제외하면 like와 유사합니다.
or like: like와 유사하지만 OR이 LIKE 조건자를 연결하는 데 사용된다는 점이 다릅니다.
or not like: OR이 NOT LIKE 조건자를 연결하는 데 사용된다는 점을 제외하면 not like와 유사합니다.
관련 권장사항:
위 내용은 Yii 11.17 데이터베이스 관련 작업 지침의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!