Yii 11.17 데이터베이스 관련 작업 지침

不言
풀어 주다: 2023-03-25 06:28:01
원래의
1297명이 탐색했습니다.

이 글에서는 특정 참조 가치가 있는 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 프레임워크 세부정보

Yii 다중 애플리케이션 다중 모듈

Yii2 구성의 기본 개념

위 내용은 Yii 11.17 데이터베이스 관련 작업 지침의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿