>  기사  >  php教程  >  PHP PDO 함수 라이브러리에 대한 자세한 설명

PHP PDO 함수 라이브러리에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-01-06 14:31:251342검색

현재 '데이터베이스 추상화 계층'을 구현하려면 갈 길이 멀습니다. PDO와 같은 '데이터베이스 액세스 추상화 계층'을 사용하는 것은 좋은 선택입니다.

PDO에는 사전 정의된 세 가지 클래스가 포함되어 있습니다.

PDO에는 사전 정의된 세 가지 클래스인 PDO, PDOStatement 및 PDOException이 포함되어 있습니다.

1.PDO

PDO->beginTransaction() — 롤백 시작 지점 표시
PDO->commit() — 롤백 종료 지점 표시 및 SQL 실행
PDO->__construct() — PDO 링크 데이터베이스의 인스턴스 생성
PDO->errorCode() — 오류 코드 가져오기
PDO->errorInfo() — 오류 정보 가져오기
PDO- >exec() — SQL 문을 처리하고 영향을 받은 항목 수를 반환합니다.
PDO->getAttribute() — "데이터베이스 연결 객체"의 속성을 가져옵니다.
PDO->getAvailableDrivers() — 유효한 PDO 드라이브 이름 가져오기
PDO->lastInsertId() — 마지막으로 작성된 데이터 조각의 기본 키 값 가져오기
PDO->prepare() — "쿼리 개체" 생성
PDO -> ;query() — SQL 문을 처리하고 "PDOStatement"를 반환합니다.
PDO->quote() — SQL의 문자열에 따옴표를 추가합니다.
PDO->rollBack() — return 실행 Roll
PDO->setAttribute() — "데이터베이스 연결 개체"에 대한 속성 설정

2. PDOStatement

PDOStatement->bindColumn() — 열을 PHP에 바인딩 변수
PDOStatement->bindParam() — 지정된 변수 이름에 매개변수를 바인딩합니다
PDOStatement->bindValue() — 값을 매개변수에 바인딩
PDOStatement->closeCursor() — 닫습니다. 커서를 사용하여 명령문을 다시 실행할 수 있습니다.
PDOStatement->columnCount() — 결과 집합의 열 수를 반환합니다.
PDOStatement->errorCode() — 마지막 작업과 관련된 SQLSTATE를 가져옵니다. 명령문 핸들
PDOStatement->errorInfo() — 명령문 핸들의 마지막 작업과 관련된 확장 오류 정보를 가져옵니다.
PDOStatement->execute() — 준비된 명령문을 실행합니다.
PDOStatement-> () — 결과 집합에서 다음 행을 가져옵니다
PDOStatement->fetchAll() — 모든 결과 집합 행을 포함하는 배열을 반환합니다
PDOStatement->fetchColumn() — 다음 행에서 단일 열을 반환합니다. 결과 세트의 행
PDOStatement->fetchObject() — 다음 행을 가져와서 객체로 반환합니다.
PDOStatement->getAttribute() — 명령문 속성 검색
PDOStatement-> () — 결과 집합의 열에 대한 메타데이터를 반환합니다.
PDOStatement->nextRowset() — 다중 행 집합 문 핸들에서 다음 행 집합으로 이동합니다.
PDOStatement->rowCount() — 개수를 반환합니다. 마지막 SQL 문의 영향을 받은 행
PDOStatement->setAttribute() — 명령문 속성 설정
PDOStatement->setFetchMode() — 이 명령문에 대한 기본 가져오기 모드 설정

PDO는 A입니다. "데이터베이스 액세스 추상화 계층"은 다양한 데이터베이스의 액세스 인터페이스를 통합하는 데 사용됩니다. mysql 및 mysqli의 함수 라이브러리와 비교할 때 PDO는 ADODB 및 MDB2에 비해 데이터베이스 간 사용을 더욱 친숙하게 만듭니다. 현재 '데이터베이스 추상화 계층'을 구현하려면 갈 길이 멀다. PDO와 같은 '데이터베이스 액세스 추상화 계층'을 사용하는 것은 좋은 선택이다.

PDO에는 사전 정의된 세 가지 클래스가 포함되어 있습니다.

PDO에는 사전 정의된 세 가지 클래스인 PDO, PDOStatement 및 PDOException이 포함되어 있습니다.

1.PDO

PDO->beginTransaction() — 롤백 시작 지점 표시
PDO->commit() — 롤백 종료 지점 표시 및 SQL 실행
PDO->rollBack() — 롤백 수행
PDO->__construct() — PDO 링크 데이터베이스의 인스턴스 생성
PDO->errorCode() — 오류 코드 가져오기
PDO-> ;errorInfo() — 오류 정보 가져오기
PDO->exec() — SQL 문을 처리하고 영향을 받은 항목 수를 반환합니다.
PDO->getAttribute() — "데이터베이스 연결 개체" 가져오기 PDO->getAvailableDrivers() — 유효한 PDO 드라이버 이름 가져오기
PDO->lastInsertId() — 작성된 마지막 데이터 조각의 기본 키 값 가져오기
PDO->prepare( ) — "쿼리 객체" 생성
PDO->query() — SQL 문을 처리하고 "PDOStatement" 반환
PDO->quote() — SQL 인용문의 문자열에 추가
PDO ->setAttribute() — "데이터베이스 연결 개체"에 대한 속성 설정

자세한 설명 1) PDO에서 데이터베이스 연결

$dsn = 'mysql:dbname=ent;host =127.0.0.1′;
$user = 'root';
$password = '123456';
시도해 보세요 {
$dbh = new PDO($dsn, $user, $password, array (PDO::ATTR_PERSISTENT = > true));
$dbh->query('set names utf8;');
foreach ($dbh->query('SELECT * from tpm_juese') as $row) {
print_r($row);
}
} catch (PDOException $e) {
echo '연결 실패: ' . $e->getMessage();
}

많은 웹 애플리케이션은 데이터베이스에 대한 지속적인 연결을 사용하여 최적화됩니다. 영구 연결은 스크립트 끝에서 닫히지 않고
대신 캐시되어 다른 스크립트가 동일한 ID로 연결을 요청할 때 재사용됩니다.
영구 연결 캐시를 사용하면 스크립트가 데이터베이스와 통신해야 할 때마다 새 연결을 배포하는 리소스 소비를 방지하여 웹 애플리케이션을 더 빠르게 만들 수 있습니다.
위 예제의 배열(PDO::ATTR_PERSISTENT => true)은 연결 유형을 영구 연결로 설정합니다.

자세한 설명 2) PDO에서의 트랜잭션
PDO->beginTransaction(), PDO->commit(), PDO->rollBack()은 롤백 기능이 지원될 때 사용되는 세 가지 방법입니다. 함께. PDO->beginTransaction() 메소드는 시작점을 표시하고, PDO->commit() 메소드는 롤백 종료점을 표시하고 SQL을 실행하며, PDO->rollBack()은 롤백을 수행합니다.
{
$dbh = new PDO('mysql:host=localhost;dbname=test', 'root', ”);
$dbh->query(를 시도해 보세요. '이름 설정 utf8;');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$dbh->beginTransaction();
$dbh- >exec("INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('mick', 22);");
$dbh->exec("INSERT INTO `test `.`table` (`name` ,`age`)VALUES ('lily', 29);");
$dbh->exec("INSERT INTO `test`.`table` (`name` ,`age`)VALUES ('susan', 21);");
$dbh->commit();

} catch(예외 $e) {
$dbh-> ;rollBack();
echo "Failed: " . $e->getMessage();
}
?>
이제 쿼리를 배포하기 전에 PDO를 통해 연결을 설정했습니다. PDO가 트랜잭션을 관리하는 방법을 이해해야 합니다. 이전에 트랜잭션 처리를 접한 적이 없다면(이제 간략하게 소개하겠습니다.) 원자성, 일관성, 독립성 및 내구성(Atomicity), 일관성, 격리 및 내구성(ACID)의 4가지 주요 기능을 제공합니다. 평신도 입장에서는 트랜잭션의 모든 작업이 제출되면 단계적으로 실행되더라도 데이터베이스에 안전하게 적용되어야 하며 다른 연결의 방해를 받지 않아야 하며 오류가 발생하면 쉽고 자동으로 취소될 수 있습니다. 트랜잭션의 일반적인 용도는 일괄 변경 사항을 "저장"한 다음 즉시 실행하는 것입니다. 즉, 업데이트 효율성이 완전히 향상되므로 트랜잭션을 통해 스크립트가 더욱 빠르고 강력해집니다. 이 이점은 여전히 ​​올바르게 사용해야 함)

안타깝게도 모든 데이터베이스가 트랜잭션을 지원하는 것은 아니므로 PDO는 연결을 설정할 때 "자동 커밋" 모드로 간주되는 모드에서 실행해야 합니다. 자동 커밋 모드는 실행하는 모든 쿼리를 의미합니다. 데이터베이스가 트랜잭션을 지원하는지 여부에 관계없이 자체 암시적 트랜잭션 처리가 있습니다. 트랜잭션이 필요한 경우 PDO->beginTransaction() 메서드를 사용하여 트랜잭션을 생성해야 합니다. 기본 드라이버가 트랜잭션을 지원하지 않으면 PDOException이 발생합니다(예외 처리 설정에 관계없이 이는 항상 심각한 오류 조건이므로). 트랜잭션 내에서 트랜잭션의 코드가 성공적으로 실행되었는지 여부에 따라 PDO->commit() 또는 PDO->rollBack()을 사용하여 트랜잭션을 종료할 수 있습니다.

스크립트가 종료되거나 연결이 닫힐 때 아직 완료되지 않은 트랜잭션이 있으면 PDO가 자동으로 롤백합니다. 이는 스크립트가 예기치 않게 종료되는 경우 안전한 솔루션입니다. 트랜잭션을 명시적으로 커밋하지 않으면 뭔가 잘못되었다고 가정하고 데이터 안전을 위해 롤백을 수행합니다.

2.PDO문

PDOStatement->bindColumn() — 열을 PHP 변수에 바인딩
PDOStatement->bindParam() — 매개변수를 지정된 변수 이름에 바인딩
PDOStatement->bindValue() — 매개변수에 대한 값
PDOStatement->closeCursor() — 커서를 닫아 명령문을 다시 실행할 수 있도록 합니다.
PDOStatement->columnCount() — 결과 세트의 열 수를 반환합니다
PDOStatement->errorCode() — 명령문 핸들의 마지막 작업과 관련된 SQLSTATE를 가져옵니다.
PDOStatement->errorInfo() — 명령문 핸들의 마지막 작업과 관련된 확장 오류 정보를 가져옵니다.
PDOStatement-> ;execute() — 준비된 명령문 실행
PDOStatement->fetch() — 결과 세트에서 다음 행을 가져옵니다
PDOStatement->fetchAll() — 모든 결과 세트 행을 포함하는 배열을 반환합니다
PDOStatement->fetchColumn() — 결과 집합의 다음 행에서 단일 열을 반환합니다.
PDOStatement->fetchObject() — 다음 행을 가져와 객체로 반환합니다.
PDOStatement-> ;getAttribute() — 명령문 속성 검색
PDOStatement->getColumnMeta() — 결과 집합의 열에 대한 메타데이터를 반환합니다.
PDOStatement->nextRowset() — 다중 행 집합에서 다음 행 집합으로 이동합니다. 명령문 핸들
PDOStatement->rowCount() — 마지막 SQL 문의 영향을 받은 행 수를 반환합니다.
PDOStatement->setAttribute() — 명령문 속성 설정
PDOStatement->setFetchMode() — 이 명령문에 대한 기본 가져오기 모드를 설정합니다

三、PDOException

PDO 提供了3中不同的错误处理策略。
1. PDO::ERRMODE_SILENT
PDO는 문과 데이터베이스에 사용되며 PDO->errorCode() 및 PDO->error(Info) 방법을 사용합니다.查错误; PDOStatement->errorCode() 또는 PDOStatement->errorInfo() 방법을 사용하여 PDOStatement->errorInfo() 방법을 사용하세요.信息。而如果错误是가 데이터베이스에 있습니다.调用时导致的,你就应该这个데이터베이스对象上调用那两个방법。
2. PDO::ERRMODE_WARNING
PDO는 E_WARNING을 사용하여 PDO를 생성하고 E_WARNING을 제공합니다.果你只是想看看发生了什么问题而不想中断程序的流程的话。
3. PDO::ERRMODE_EXCEPTION
작동하는 PDO는 PDOException을 제거하는 혁신적인 방식으로 PDOException을 생성합니다.设置는 매우 유용하고 유용하며 매우 유용합니다. “폭발(Blow up)”脚本中的 Out错点 , Non常快速 的 指向一个你代码中可能 Out错区域 .回滚。)
异常模式也是不常매우 유용한, 因为你可以使用比以前那种使用传统的PHP风格的错误处理结构更清晰的结构处理,比误比使用静模式使用更少的代码及嵌套,也能够更加明确地检查每个数据库访问返回值.
PHP에서 사용하는 SQL-92 SQLSTATE에 대한 예외가 더 많습니다.将自己本身의 현대적인 SQLSTATE PDO->errorCode() 방법은 SQLSTATE 대신에 발생합니다. Info()방법, 它可以返回一个包含了SQLSTATE代号,特定数据库驱动的错误代号和特定数据库驱动的错误说明字符串。

// 修改默认的错误显示级别
$dbh-> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
?>
属性列表:

PDO::PARAM_BOOL
부울 유형을 나타냅니다.
PDO::PARAM_NULL
SQL에서 NULL 유형을 나타냅니다.
PDO::PARAM_INT
SQL에서 INTEGER 유형을 나타냅니다.
PDO ::PARAM_STR
은 SQL에서 SQL CHAR을 나타내고, VARCHAR 유형은
PDO::PARAM_LOB
이 SQL에서 대형 객체 유형을 나타냅니다.
PDO::PARAM_STMT
는 SQL을 나타냅니다. 레코드 세트 유형은 그렇지 않습니다. 아직 지원됨
PDO::PARAM_INPUT_OUTPUT
매개변수가 저장 프로시저에 대한 INOUT 매개변수임을 지정합니다. 이 값을 명시적 PDO::PARAM_* 데이터 유형과 비트 단위로 OR해야 합니다.
PDO::FETCH_LAZY
결과의 각 행을 객체로 반환
PDO::FETCH_ASSOC
키 값을 첨자로 사용하여 쿼리의 결과 집합만 반환합니다. 이름이 같은 데이터는 하나만 반환합니다.
PDO: FETCH_NAMED
키 값이 첨자로 포함된 쿼리의 결과 집합만 반환하고, 동일한 이름의 데이터는 배열 형식으로 반환됩니다.
PDO::FETCH_NUM
결과 집합만 반환합니다. 숫자가 첨자인 쿼리
PDO::FETCH_BOTH
키 값과 숫자가 첨자인 쿼리의 결과 집합을 동시에 반환합니다.
PDO::FETCH_OBJ
결과를 반환합니다. object
PDO::FETCH_BOUND
형식으로 설정 PDOStatement::bindParam() 및 PDOStatement::bindColumn()에 바인딩된 값은 할당 후 변수 이름으로 반환됩니다.
PDO::FETCH_COLUMN
는 결과 셋 중 특정 컬럼만 반환된다는 의미
PDO::FETCH_CLASS
결과 셋이 클래스 형태로 반환된다는 의미
PDO::FETCH_INTO
데이터가 반환된다는 의미 기존 클래스에 병합되어 반환됩니다
PDO::FETCH_FUNC
PDO::FETCH_GROUP
PDO ::FETCH_UNIQUE
PDO::FETCH_KEY_PAIR
결과 집합을 첫 번째 키 형식으로 반환합니다. 값과 다음 숫자
PDO::FETCH_CLASSTYPE
PDO::FETCH_SERIALIZE
는 데이터가 기존 클래스에 병합되고 다시 직렬화됨을 의미합니다. 위임, 실행 시작
PDO::ATTR_PREFETCH
애플리케이션에서 얻은 데이터 크기를 미리 설정하세요. 모든 데이터베이스가 지원하는 것은 아닙니다.
PDO::ATTR_TIMEOUT
연결 데이터베이스 시간 초과 값 설정
PDO ::ATTR_ERRMODE
오류 처리 모드 설정
PDO::ATTR_SERVER_VERSION
PDO 연결의 서버측 데이터베이스 버전을 나타내는 읽기 전용 속성
PDO::ATTR_CLIENT_VERSION
PDO 연결을 나타내는 읽기 전용 속성 클라이언트 PDO 드라이버 버전
PDO::ATTR_SERVER_INFO
PDO에 연결된 서버의 메타 정보를 나타내는 읽기 전용 속성
PDO::ATTR_CONNECTION_STATUS
PDO::ATTR_CASE
PDO::CASE_에 있는 내용 * 열 형식으로 작동
PDO::ATTR_CURSOR_NAME
포인터 이름 가져오기 또는 설정
PDO::ATTR_CURSOR
PDO는 이제 PDO::CURSOR_FWDONLY를 지원하며 포인터 유형을 설정합니다. PDO::CURSOR_FWDONLY
PDO::ATTR_DRIVER_NAME
사용된 PDO 드라이버의 이름을 반환합니다
PDO::ATTR_ORACLE_NULLS
반환된 빈 문자열을 SQL NULL로 변환
PDO::ATTR_PERSISTENT
기존 연결 가져오기
PDO::ATTR_STATEMENT_CLASS
PDO::ATTR_FETCH_CATALOG_NAMES
반환된 결과 집합에서 필드 이름 대신 사용자 정의 카탈로그 이름을 사용합니다.
PDO::ATTR_FETCH_TABLE_NAMES
반환된 결과 집합의 필드 이름 대신 사용자 정의 테이블 이름을 사용합니다.
PDO::ATTR_STRINGIFY_FETCHES
PDO::ATTR_MAX_COLUMN_LEN
PDO::ATTR_DEFAULT_FETCH_MODE
PHP 5.2.0부터 사용 가능
PDO::ATTR_EMULATE_PREPARES
PHP 5.1.3부터 ​​사용 가능.
PDO::ERRMODE_SILENT
오류 발생 시 오류 메시지를 보고하지 않습니다. 이는 기본값입니다.
PDO::ERRMODE_WARNING
오류 발생 시 php E_WARNING 메시지를 보냅니다
PDO::ERRMODE_EXCEPTION
오류 발생 시 PDOException 발생
PDO::CASE_NATURAL
열의 기본 표시 형식 응답
PDO::CASE_LOWER
열 이름을 소문자로 강제 적용
PDO:: CASE_UPPER
열 이름을 대문자로 강제 적용
PDO::NULL_NATURAL
PDO::NULL_EMPTY_STRING
PDO::NULL_TO_STRING
PDO::FETCH_ORI_NEXT
다음 데이터 행을 가져옵니다. 결과 집합, 포인터 함수가 있는 경우에만 유효함
PDO::FETCH_ORI_PRIOR
결과 집합에서 이전 데이터 행을 가져옵니다.
PDO::FETCH_ORI_FIRST
결과 세트의 첫 번째 데이터 행을 가져옵니다.
PDO::FETCH_ORI_LAST
결과 세트의 마지막 데이터 행을 가져옵니다. 포인터 함수를 사용할 수 있는 경우
PDO::FETCH_ORI_ABS
결과 집합에서 특정 데이터 행을 가져옵니다. 이는 포인터 함수를 사용할 수 있는 경우에만 유효합니다.
PDO::FETCH_ORI_REL
데이터 가져오기 포인터 함수가 있는 경우에만 유효한 결과 세트의 현재 행 뒤의 행
PDO::CURSOR_FWDONLY
역방향 전용 포인터 작업 객체 생성
PDO::CURSOR_SCROLL
포인터 작업 개체를 생성하고 PDO::FETCH_ORI_*에 내용을 전달하여 결과 집합을 제어합니다
PDO::ERR_NONE(문자열)
오류가 없을 때 오류 메시지 설정
PDO::PARAM_EVT_ALLOC
할당 이벤트
PDO::PARAM_EVT_FREE
할당 취소 이벤트
PDO::PARAM_EVT_EXEC_PRE
준비된 문을 실행하기 전에 트리거되는 이벤트.
PDO::PARAM_EVT_EXEC_POST
준비된 문을 실행한 후에 트리거되는 이벤트
PDO::PARAM_EVT_FETCH_PRE
가져오기 전에 트리거되는 이벤트 결과 집합의 결과 .
PDO::PARAM_EVT_FETCH_POST
결과 세트에서 결과를 가져온 후에 이벤트가 트리거됩니다.
PDO::PARAM_EVT_NORMALIZE
드라이버가 매개변수 이름을 정규화할 수 있도록 바인딩된 매개변수 등록 중에 이벤트가 트리거됩니다.

更多PHP PDO函数库详解关文章请关注PHP中文网!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.