>백엔드 개발 >PHP 튜토리얼 >php_php 스킬의 데이터베이스 연결 방식 pdo와 mysqli 비교 분석

php_php 스킬의 데이터베이스 연결 방식 pdo와 mysqli 비교 분석

WBOY
WBOY원래의
2016-05-16 20:22:56976검색

1) 전체 비교

  PDO MySQLi
数据库支持 12种不同的数据库支持 支持MySQL
API OOP OOP  过程
Connection Easy Easy
命名参数 支持 不支持
对象映射支持 支持 支持
预处理语句 
(客户端)
支持 不支持
性能
支持存储过程 支持 支持
PDO
MySQLi
데이터베이스 지원 12개의 서로 다른 데이터베이스 지원 MySQL 지원
API OOP 프로세스
연결 쉬움 쉬움
이름이 지정된 매개변수 지원 지원되지 않음
객체 매핑 지원 지원 지원
준비된 진술
(클라이언트)
지원 지원되지 않음
성능 빠르게 빠르게
저장 프로시저 지원 지원 지원

2가지 연결 방법

먼저 두 가지가 데이터베이스에 어떻게 연결되는지 살펴보겠습니다.

코드 복사 코드는 다음과 같습니다.

// PDO
$pdo = new PDO("mysql:host=localhost;dbname=database", '사용자 이름', '비밀번호')
// mysqli, 프로세스 지향 접근
$mysqli = mysqli_connect('localhost','사용자 이름','비밀번호','데이터베이스')
// mysqli, 객체지향
$mysqli = new mysqli('localhost','사용자 이름','비밀번호','데이터베이스')

3가지 데이터베이스 지원

PDO는 여러 데이터베이스를 지원하지만 MYSQLI는 MYSQL만 지원합니다

4개의 명명된 매개변수 이름 매개변수

PDO 방식:

코드 복사 코드는 다음과 같습니다.

$params = array(':username' => 'test', ':email' => $mail, ':last_login' => time() - 3600); $pdo->준비('
SELECT * FROM 사용자
WHERE 사용자 이름 = :사용자 이름
AND 이메일 = :email
AND last_login > :last_login');

그러나 MYSQLI는 이 기능을 지원하지 않으며 다음만 지원합니다.

$query = $mysqli->prepare('
* 사용자로부터 선택
사용자 이름 = ?
AND 이메일 = ?
AND last_login > ?');
$query->bind_param('sss', 'test', $mail, time() - 3600);
$query->execute();


이 경우 물음표를 하나씩 정리하는 것이 번거롭고 불편할 것입니다.

5가지 ORM 매핑 지원

예를 들어 다음과 같은 클래스 사용자가 있습니다.

클래스 사용자
{
공개 $id;
공개 $first_name;
공개 $last_name;
공개함수 정보()
{
             '#' . $this->id . ': $this->first_name;
}
}
$query = "사용자로부터 ID, 이름, 성 선택";
//PDO
$result = $pdo->query($query);
$result->setFetchMode(PDO::FETCH_CLASS, '사용자');
while ($user = $result->fetch())
{
echo $user->info() "n";
}


MYSQLI는 프로세스 중심 접근 방식을 사용합니다.

if ($result = mysqli_query($mysqli, $query)) {
​while ($user = mysqli_fetch_object($result, 'User')) {
echo $user->info()."n";
}
}


MYSQLI는 프로세스 중심 접근 방식을 채택합니다.

// MySQLi, 객체 지향 방식
if ($result = $mysqli->query($query)) {
​while ($user = $result->fetch_object('사용자')) {
echo $user->info()."n";
}
}


6 SQL 인젝션 방지:


PDO 수동 설정

$username = PDO::quote($_GET['username']);
$pdo->query("SELECT * FROM 사용자 WHERE 사용자 이름 = $username");


mysqli 사용

$username = mysqli_real_escape_string($_GET['username']);
$mysqli->query("SELECT * FROM 사용자 WHERE 사용자 이름 = '$username'");

7가지 준비사항

PDO 방식:

코드 복사 코드는 다음과 같습니다.

$pdo->prepare('SELECT * FROM 사용자 WHERE 사용자 이름 = :username');
$pdo->execute(array(':username' => $_GET['username']));

MYSQLI:

코드 복사 코드는 다음과 같습니다.

$query = $mysqli->prepare('SELECT * FROM users WHERE 사용자 이름 = ?');
$query->bind_param('s', $_GET['username']);
$query->execute();

이 기사를 통해 PHP의 두 가지 연결 방법인 PDO와 mysqli에 대해 새롭게 이해하셨나요?

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