>  기사  >  백엔드 개발  >  PHP의 PDO 운영 가이드

PHP의 PDO 운영 가이드

WBOY
WBOY원래의
2023-05-21 13:01:361453검색

PHP에서는 PDO를 사용하여 데이터베이스를 운영하면 코드의 보안과 이식성을 향상시킬 수 있습니다. PDO는 데이터베이스 액세스를 위한 통합 인터페이스를 제공하고 여러 데이터베이스 유형을 지원하는 PHP 확장입니다. 이번 글에서는 PDO의 기본적인 사용법과 주의사항에 대해 소개하겠습니다.

1. 데이터베이스에 연결
PDO를 사용하여 데이터베이스에 연결하려면 다음 매개변수가 필요합니다.

$dsn: 데이터베이스 유형: 호스트=호스트 이름; dbname=데이터베이스 이름
$username: 사용자 이름
$password: 비밀번호
$ options: 문자 집합, 연결 시간 초과 등과 같은 데이터베이스 연결을 위한 일부 옵션을 지정하는 데 사용되는 선택적 매개 변수입니다.

다음은 MySQL 데이터베이스에 연결하는 예입니다.

$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$username = 'root';
$password = '123456' ;
$ options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);

try {

$pdo = new PDO($dsn, $username, $password, $options);

} catch (PDOException $e) {

die($e->getMessage());

}

2 SQL 문 실행
실행에 필요합니다. PDO를 사용한 SQL문 PDO의 prepare 메소드를 호출하면 먼저 SQL문을 준비하고 SQL문의 변수를 매개변수에 바인딩합니다. 다음으로, 실행 메소드를 호출하여 SQL 문을 실행합니다.

다음은 데이터베이스 쿼리의 예입니다.

$sql = 'SELECT id, name, age FROM users WHERE age >';
$stmt = $pdo->prepare($sql);
$ stmt- >bindParam(1, $age);
$age = 18;
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

이 예에서는 , SQL 문의 변수는 물음표로 대체됩니다. 변수를 매개변수에 바인딩할 때는 BindParam 또는 BindValue 메서드를 사용해야 합니다.

bindParam 메소드는 변수를 참조로 매개변수에 전달하는데, 이는 변수의 값이 변경되면 매개변수의 값도 변경된다는 의미입니다.

bindValue 메소드는 변수의 값을 매개변수에 복사합니다. 즉, 변수의 값이 변경되더라도 매개변수의 값은 변경되지 않습니다.

3. 트랜잭션 제어 사용
데이터베이스 작업에서 트랜잭션은 전체적으로 이 작업 그룹이 모두 성공적으로 실행되거나 모두 롤백되는 것을 의미합니다. PDO의 startTransaction, commit 및 RollBack 메소드는 트랜잭션 제어를 달성하는 데 도움이 될 수 있습니다.

다음은 데이터 삽입 예시입니다.

try {

$pdo->beginTransaction();
$stmt = $pdo->prepare('INSERT INTO users (name, age) VALUES (:name, :age)');
$stmt->bindParam(':name', $name);
$stmt->bindParam(':age', $age);

$name = '张三';
$age = 20;
$stmt->execute();

$name = '李四';
$age = 22;
$stmt->execute();

$pdo->commit();

} catch (PDOException $e) {

$pdo->rollBack();
die($e->getMessage());

}

이 예시에서 startTransaction 메소드는 트랜잭션 시작을 의미하고, commit 메소드는 트랜잭션 커밋을 의미합니다. RollBack 메소드는 트랜잭션을 롤백하는 것을 의미합니다.

4. 참고
PDO를 사용하여 데이터베이스를 운영할 때 다음 사항에도 주의해야 합니다.

  • PDO는 기본적으로 예외를 발생시키지 않습니다. 예외를 발생시키려면 데이터베이스에 연결할 때 ATTR_ERRMODE를 ERRMODE_EXCEPTION으로 지정해야 합니다. 예외.
  • PDO의 준비 메소드는 매개변수를 자동으로 이스케이프하므로 수동으로 이스케이프할 필요가 없습니다.
  • PDO의 fetchAll 메소드는 기본적으로 연관 배열을 반환합니다. PDO::FETCH_NUM을 사용하여 숫자 인덱스 배열을 가져오고 PDO::FETCH_BOTH를 사용하여 숫자 인덱스와 연관 인덱스를 모두 포함하는 배열을 가져올 수 있습니다.
  • MySQL 데이터베이스의 경우 PDO가 SQL 문을 실행할 때 시뮬레이션된 준비된 문을 사용해야 SQL 삽입 공격을 방지할 수 있습니다. 시뮬레이션된 준비된 문을 사용하는 경우 데이터베이스에 연결할 때 ATTR_EMULATE_PREPARES를 false로 지정해야 합니다.

결론적으로 PDO를 사용하여 데이터베이스를 운영하면 코드의 보안성과 이식성을 향상시킬 수 있습니다. 데이터베이스를 운영할 때 보안 문제를 피하기 위해서는 위의 방법들을 조합하고, 더 많이 생각하고, 더 많이 시도해보고, PDO를 더 잘 활용할 수 있습니다.

위 내용은 PHP의 PDO 운영 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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