> 백엔드 개발 > PHP 튜토리얼 > 보안 및 성능 향상을 위해 MySQL 기능을 PDO로 어떻게 대체할 수 있습니까?

보안 및 성능 향상을 위해 MySQL 기능을 PDO로 어떻게 대체할 수 있습니까?

Barbara Streisand
풀어 주다: 2024-11-09 07:12:02
원래의
331명이 탐색했습니다.

How can I replace MySQL functions with PDO for improved security and performance?

MySQL 함수를 PDO로 교체

소개

PHP용 mysql 확장은 더 이상 사용되지 않으며 향후 제거될 예정입니다. . 대안으로, MySQL 및 기타 데이터베이스에 연결하려면 PDO(PHP Data Objects) 확장을 권장합니다. 이 문서에서는 mysql 기능을 PDO로 대체하는 방법에 대한 가이드를 제공합니다.

PDO로 변환해야 하는 이유

  • 향상된 보안: PDO SQL 주입 공격에 대한 보호 기능을 제공합니다.
  • 개선됨 성능: PDO는 오버헤드를 최소화하고 더 나은 캐싱 메커니즘을 제공합니다.
  • 데이터베이스 추상화: PDO는 여러 데이터베이스 유형에 대한 원활한 연결을 허용합니다.

연결 중 MySQL

$dsn = 'mysql:dbname=databasename;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

$connection = new PDO($dsn, $user, $password);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
로그인 후 복사

MSSQL에 연결

$dsn = 'sqlsrv:Server=127.0.0.1;Database=databasename';
$user = 'dbuser';
$password = 'dbpass';

$connection = new PDO($dsn, $user, $password);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
로그인 후 복사

쿼리 수행

PDO는 준비된 문을 사용하여 다음을 수행합니다. SQL 주입을 피하세요 취약점.

  • 명명된 매개변수로 준비된 쿼리:
$SQL = 'SELECT ID, EMAIL FROM users WHERE name = :username';
$stmt = $connection->prepare($SQL);
$stmt->execute([':username' => 'someone']);
로그인 후 복사
  • 인덱싱된 매개변수로 준비된 쿼리 매개변수:
$SQL = 'SELECT ID, EMAIL FROM users WHERE name = ?';
$stmt = $connection->prepare($SQL);
$stmt->execute(['someone']);
로그인 후 복사

결과 가져오기

  • 단일 행 가져오기 배열:
$row = $stmt->fetch(PDO::FETCH_ASSOC);
로그인 후 복사
  • 모든 행을 배열의 배열로 가져오기:
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
로그인 후 복사

예제 클래스

간단한 PDO 일반적인 작업을 캡슐화하는 연결 클래스:

class PdoConnection {

    public function __construct($dsn, $user, $password, $options = []) {
        // ... initialize connection
    }

    public function query($sql) {
        // ... execute query and return result
    }

    public function prepare($sql, $params = []) {
        // ... execute prepared query and return result
    }
}
로그인 후 복사

위 내용은 보안 및 성능 향상을 위해 MySQL 기능을 PDO로 어떻게 대체할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿