PHP를 사용하여 데이터베이스에 액세스할 때 PHP와 함께 제공되는 데이터베이스 드라이버 외에도 일반적으로 PDO와 MySQLi라는 두 가지 더 나은 옵션이 있습니다. 실제 개발 과정에서 어느 것을 선택할지 결정하려면 먼저 두 가지 모두에 대해 상대적으로 포괄적인 이해가 필요합니다. 이 기사에서는 차이점을 분석하고 여러 데이터베이스 유형 지원, 안정성, 성능 등을 비교합니다.
PDO | MySQLi | |
데이터베이스 지원 | 12개의 다양한 드라이버 | MySQL 전용 |
API | OOP | OOP + 절차적 |
Connection | Easy | Easy |
이름이 지정된 매개변수 | Yes | No |
객체 매핑 | 예 | 예 |
준비됨 문 (클라이언트 측) |
예 | 아니요 |
Performance | Fast | Fast |
저장 프로시저 | 예 | 예 |
3. 데이터베이스 지원
// PDO$pdo = new PDO("mysql:host=localhost;dbname=database", 'username', 'password'); // mysqli, procedural way$mysqli = mysqli_connect('localhost','username','password','database'); // mysqli, object oriented way$mysqli = new mysqli('localhost','username','password','database');여러 데이터베이스를 지원하면 어떤 이점이 있나요? 귀하의 프로그램이 향후에 mysql에서 sql server 또는 oracle로 변경하려는 경우 PDO의 장점이 반영될 것입니다. 왜냐하면 데이터베이스 변경이 프로그램 인터페이스에 투명하고 MySQLi를 사용하는 경우 PHP 코드 변경이 매우 적기 때문입니다. , 모든 사용자 데이터베이스의 모든 내용을 다시 작성해야 하므로 이러한 변경만 수행할 수 있습니다.
PDO 명명된 매개변수 및 매개변수 바인딩:
var_dump(PDO::getAvailableDrivers());
안타깝게도 MySQLi는 PDO와 같은 명명된 매개변수 바인딩을 지원하지 않습니다.
5. 객체 매핑
$query = $mysqli->prepare(' SELECT * FROM users WHERE username = ? AND email = ? AND last_login > ?'); $query->bind_param('sss', 'test', $mail, time() - 3600);$query->execute();
둘이 사용하는 객체의 코드는 아래를 참고해주세요:
class User { public $id; public $first_name; public $last_name; public function info() { return '#'.$this->id.': '.$this->first_name.' '.$this->last_name; } }
6. 보안
둘 다 SQL 인젝션을 방지할 수 있습니다. 먼저 예를 살펴보겠습니다.
$_GET['username'] = "'; DELETE FROM users; /*"
위에서는 PDO 및 MySQLi API와 함께 제공되는 함수를 사용하여 얻은 매개변수의 값을 이스케이프합니다.
다음은 준비된 문 매개변수를 바인딩하는 더 효율적이고 안전한 방법입니다.
PDO는 MySQL이 아닌 다른 데이터베이스도 지원할 수 있고 MySQLi는 특별히 MySQL용으로 설계되었기 때문에 MySQLi의 성능은 PDO보다 약간 더 좋습니다. 그러나 PDO와 MySQLi는 여전히 PHP의 기본 MySQL 확장만큼 빠르지 않습니다. 그러나 이러한 종류의 성능 비교는 실제로 큰 의미가 없습니다. 왜냐하면 모두 매우 빠르기 때문입니다. 프로그램 성능 요구 사항이 특별히 까다롭지 않은 경우 세 가지 모두 만족할 수 있습니다. 어떤 것을 선택하고 싶은지는 실제 상황에 따라 저울질해야 합니다.
PDO는 12가지 유형의 데이터베이스 드라이버와 명명된 매개변수 바인딩을 지원하는데, 이는 위의 비교를 통해 자신의 프로젝트에서 데이터베이스에 연결하는 데 어떤 것을 사용할지 알 수 있다고 생각합니다.
관련 권장 사항:
위 내용은 002 - PDO와 MySQLi의 차이점과 선택의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!