Looking for pdo Answers? Try Ask4KnowledgeBase
Looking for pdo Keywords? Try Ask4Keywords

pdopdo 시작하기


비고

이 섹션은 pdo가 무엇인지, 그리고 개발자가 왜 그것을 사용하고 싶어하는지에 대한 개요를 제공합니다.

또한 pdo 내의 큰 주제를 언급하고 관련 주제에 링크해야합니다. pdo에 대한 문서는 새로운 문서이기 때문에 관련 주제의 초기 버전을 만들어야 할 수도 있습니다.

설치 또는 설정

PDO는 PHP의 범용 데이터베이스 연결 명령으로 12 개의 다른 데이터베이스 유형 (예 : MySQL, MongoDB, NoSQL)을 지원 합니다. PDO에 대한 큰 보너스는 데이터베이스 유형을 지원하는 코드를 계산하므로 다른 데이터베이스 시스템으로 이동할 때 어떤 기회도 가질 필요가 없다는 것입니다.


개요

PDO MySQLi
데이터베이스 지원 12 명의 다른 드라이버 MySQLi
API OOP OOP + 절차 적
연결 쉬운 쉬운
명명 된 매개 변수 아니
객체 매핑
준비된 진술 (클라이언트 쪽) 아니
공연 빠른 빠른
저장 프로 시저

PDO를 사용하여 데이터베이스에 연결 :

연결 부분은 어색하지만 우리는 처리해야합니다. PDO의 나머지 부분은 간단하고 유용하며, 보안 부분을 더 쉽게 만드는 데에도 도움이됩니다.

$connection = new PDO("mysql:host=localhost;dbname=myDatabase, username, password);
 

PDO 연결은 다음을 수행하여 주문됩니다.

PDO ( database type : 호스트 = host , dbname = database name , root , password );


PDO를 사용하여 데이터베이스에서 안전한 선택 :

// We use a array to hold the data about whats the :var is in normal $var
$params = array(
    ':username' => '$username', 
    ':email' => $mail, 
);

// Prepare the SQL and using named secure parameters ":username"
$pdo->prepare('SELECT * FROM users WHERE username = :username AND email = :email');

// Execute the $params and send them to the $pdo->prepare 
$pdo->execute($params);
 

방금 읽은 코드는 보호 된 에이전트 SQL 주입입니다.


자습서 :

설치 :

PDO를 설치하지 않은 경우 설치 방법

가이드 :

W3Schools 자습서
Tuts + 튜토리얼 (권장)

PDO 설정 속성 Errormode 설정

PDO :: setAttribute는 데이터베이스 핸들에 속성을 설정합니다. setAttribute의 정의는 다음과 같습니다.

public bool PDO::setAttribute ( int $attribute , mixed $value )
 

PDO :: ATTR_ERRMODE : 이 속성은 오류보고에 사용됩니다. 다음 값 중 하나를 가질 수 있습니다.

  • PDO::ERRMODE_SILENT : ATTR_ERRMODE가 코드에 설정되어 있지 않으면 ERRMODE_SILENT가 ATTR_ERRMODE 속성의 기본값입니다. 오류 코드를 설정합니다. 자동 모드에서 SQL에 오류가 있으면 PDO는 예외를 발생시키지 않습니다. PDO는 경고를 발행하지 않습니다. 단순히 false를 반환합니다. PDO :: ERRMODE_SILENT 값은 0입니다. 스크립트는 오류나 경고를 생성하지 않고 실행됩니다.
  • PDO::ERRMODE_WARNING :이 값은 E_WARNING을 발생시킵니다. 경고 모드에서 SQL에 오류가 있으면 PDO는 경고를 발행하지만 스크립트는 계속 실행됩니다. PDO :: ERRMODE_WARNING의 값은 1입니다. 스크립트는 오류에 대한 경고를 생성하면서 실행됩니다.
  • PDO::ERRMODE_EXCEPTION :이 값은 예외를 발생시킵니다. 예외 모드에서 SQL에 오류가 있으면 PDO가 예외를 발생시키고 스크립트 실행이 중지됩니다. PDO :: ERRMODE_EXCEPTION의 값은 2입니다. 스크립트는 실행을 중지하고 예외를 throw하는 오류를 생성합니다.

예 : 이제 몇 가지 예와 함께 ATTR_ERRMODE 속성의 다양한 값을 살펴 보겠습니다. 그렇게하려면 learn_project_db 라는 데이터베이스를 만들고 그 안에 user_table 이라는 테이블을 삽입하십시오. 다음 SQL 스 니펫을 사용하여이를 수행 할 수 있습니다.

DROP DATABASE IF EXISTS `learn_project_db`;
CREATE DATABASE `learn_project_db`;
USE `learn_project_db`;
CREATE TABLE `user_table` (
  `user_email` varchar(50) PRIMARY KEY,
  `user_password` varchar(50) NOT NULL
);
INSERT INTO `user_table` (`user_email`, `user_password`) VALUES
('test1@example.com', '123'),
('test2@example.com', '1234'),
('test3@example.com', '12345');
 

처음에 우리는 ATTR_ERRMODE 설정하지 않고 SQL 쿼리에 오류가 발생하면 어떤 일이 일어나는지 확인하려고합니다. default.php 라는 PHP 파일을 만들고 다음을 시도해보십시오 :

<?php
    $server = "localhost";
    $db_username = "root";
    $db_password = "";
    $db_name = "learn_project_db";
    $conn = new PDO("mysql:host=$server;dbname=$db_name",$db_username,$db_password);
    $sql_query = "SELECT * FROM wrong_user_table";
    $stmt = $conn->prepare($sql_query);
    $stmt->execute();
    $result_set = $stmt->fetchAll();
    var_dump($result_set);
    /*Get the current error mode of PDO*/
    $current_error_mode = $conn->getAttribute(PDO::ATTR_ERRMODE);
    echo "<br>";
    echo "Value of PDO::ATTR_ERRMODE: ".$current_error_mode; 
?>
 

앞에서 작성한 데이터베이스에 정의되지 않은 쿼리의 테이블 이름은 wrong_user_table 입니다. 그러나 ATTR_ERRMODE 설정하지 않았으므로 예외를 throw하거나 경고를 표시하지 않고 스크립트를 실행합니다. 결과 배열로 빈 배열을 출력합니다. PDO::ATTR_ERRMODE 의 값은 0입니다.

이제 PDO::ERRMODE_WARNING 값으로 ATTR_ERRMODE 를 설정하면 SQL 쿼리에 오류가 발생합니다. warning.php 라는 PHP 파일을 생성하고 다음을 시도하십시오 :

<?php
    $server = "localhost";
    $db_username = "root";
    $db_password = "";
    $db_name = "learn_project_db";
    $conn = new PDO("mysql:host=$server;dbname=$db_name",$db_username,$db_password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);    
    $sql_query = "SELECT * FROM wrong_user_table";
    $stmt = $conn->prepare($sql_query);
    $stmt->execute();
    $result_set = $stmt->fetchAll();
    var_dump($result_set);
    /*Get the current error mode of PDO*/
    $current_error_mode = $conn->getAttribute(PDO::ATTR_ERRMODE);
    echo "<br>";
    echo "Value of PDO::ATTR_ERRMODE: ".$current_error_mode; 
?>
 

warning.php 출력은 다음과 같습니다.

Warning: PDOStatement::execute(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'learn_project_db.wrong_user_table' doesn't exist in E:\xampp\htdocs\oop\db.php on line 10
array(0) { } 
Value of PDO::ATTR_ERRMODE: 1
 

ATTR_ERRMODEPDO::ERRMODE_WARNING 값을 사용하여 ATTR_ERRMODE 를 설정하면 경고 메시지가 표시됩니다. 스크립트가 성공적으로 실행되고 PDO::ATTR_ERRMODE 값이 1 인 빈 배열이 출력으로 표시됩니다.

마지막으로 ATTR_ERRMODEPDO::ERRMODE_EXCEPTION 값으로 설정하면 SQL 쿼리에 오류가 발생합니다. error.php 라는 PHP 파일을 error.php 을 시도해보십시오 :

<?php
    $server = "localhost";
    $db_username = "root";
    $db_password = "";
    $db_name = "learn_project_db";
    $conn = new PDO("mysql:host=$server;dbname=$db_name",$db_username,$db_password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    
    $sql_query = "SELECT * FROM wrong_user_table";
    $stmt = $conn->prepare($sql_query);
    $stmt->execute();
    $result_set = $stmt->fetchAll();
    var_dump($result_set);
    /*Get the current error mode of PDO*/
    $current_error_mode = $conn->getAttribute(PDO::ATTR_ERRMODE);
    echo "<br>";
    echo "Value of PDO::ATTR_ERRMODE: ".$current_error_mode; 
?>
 

error.php 출력은 error.php 과 같습니다.

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'learn_project_db.wrong_user_table' doesn't exist' in E:\xampp\htdocs\oop\db.php:10 Stack trace: #0 E:\xampp\htdocs\oop\db.php(10): PDOStatement->execute() #1 {main} thrown in E:\xampp\htdocs\oop\db.php on line 10
 

ATTR_ERRMODEPDO::ERRMODE_EXCEPTION 값으로 ATTR_ERRMODE 를 설정하면 PDOException 이 발생하여 치명적인 오류가 발생합니다. 예외가 발생하면 스크립트 실행이 중지됩니다. 이것은 데이터베이스 쿼리 관련 오류를 처리하는 가장 일반적인 방법입니다. 대부분의 경우 SQL 쿼리에 상주 할 수있는 예외를 처리하기 위해이 값으로 ATTR_ERRMODE 특성을 설정합니다.