이 섹션은 pdo가 무엇인지, 그리고 개발자가 왜 그것을 사용하고 싶어하는지에 대한 개요를 제공합니다.
또한 pdo 내의 큰 주제를 언급하고 관련 주제에 링크해야합니다. pdo에 대한 문서는 새로운 문서이기 때문에 관련 주제의 초기 버전을 만들어야 할 수도 있습니다.
PDO는 PHP의 범용 데이터베이스 연결 명령으로 12 개의 다른 데이터베이스 유형 (예 : MySQL, MongoDB, NoSQL)을 지원 합니다. PDO에 대한 큰 보너스는 데이터베이스 유형을 지원하는 코드를 계산하므로 다른 데이터베이스 시스템으로 이동할 때 어떤 기회도 가질 필요가 없다는 것입니다.
PDO | MySQLi | |
---|---|---|
데이터베이스 지원 | 12 명의 다른 드라이버 | MySQLi |
API | OOP | OOP + 절차 적 |
연결 | 쉬운 | 쉬운 |
명명 된 매개 변수 | 예 | 아니 |
객체 매핑 | 예 | 예 |
준비된 진술 (클라이언트 쪽) | 예 | 아니 |
공연 | 빠른 | 빠른 |
저장 프로 시저 | 예 | 예 |
연결 부분은 어색하지만 우리는 처리해야합니다. PDO의 나머지 부분은 간단하고 유용하며, 보안 부분을 더 쉽게 만드는 데에도 도움이됩니다.
$connection = new PDO("mysql:host=localhost;dbname=myDatabase, username, password);
PDO 연결은 다음을 수행하여 주문됩니다.
PDO (
database type
: 호스트 =host
, dbname =database name
,root
,password
);
// 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 주입입니다.
설치 :
가이드 :
W3Schools 자습서
Tuts + 튜토리얼 (권장)
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_ERRMODE
는 PDO::ERRMODE_WARNING
값을 사용하여 ATTR_ERRMODE
를 설정하면 경고 메시지가 표시됩니다. 스크립트가 성공적으로 실행되고 PDO::ATTR_ERRMODE
값이 1 인 빈 배열이 출력으로 표시됩니다.
마지막으로 ATTR_ERRMODE
를 PDO::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_ERRMODE
는 PDO::ERRMODE_EXCEPTION
값으로 ATTR_ERRMODE
를 설정하면 PDOException
이 발생하여 치명적인 오류가 발생합니다. 예외가 발생하면 스크립트 실행이 중지됩니다. 이것은 데이터베이스 쿼리 관련 오류를 처리하는 가장 일반적인 방법입니다. 대부분의 경우 SQL 쿼리에 상주 할 수있는 예외를 처리하기 위해이 값으로 ATTR_ERRMODE
특성을 설정합니다.