소개:
PDO 확장은 PHP가 데이터베이스에 액세스하기 위한 가볍고 일관된 인터페이스를 정의하므로 어떤 데이터베이스가 사용되더라도 데이터를 쿼리하고 검색할 수 있습니다. 일관된 기능을 통해 수행될 수 있습니다.
일관된 기능과 작성 방법을 통해 다양한 데이터베이스를 운영할 수 있는 데이터베이스 액세스 추상화 계층을 제공합니다. 이는 향후 데이터베이스 마이그레이션에 도움이 되고 물론 보안도 향상됩니다.
비교:
PHP는 mysql을 예로 사용합니다. 일반적으로 사용되는 방법에는 php_mysql, php_mysqli, pdo가 있습니다
1. php_mysql과 php_mysqli는 이식성이 없으며 mysql에만 적용할 수 있습니다. 데이터베이스, pdo 등을 쉽게 이식할 수 있습니다.
2.php_mysql은 PHP를 처음 접할 때 데이터베이스 조작을 배우는 함수이지만 실제로 거의 사용하지 않는 함수인데 가장 중요한 점은 보안 문제를 쉽게 일으킬 수 있다는 것입니다.
SQL 주입이 있으므로 PHP는 mysql_real_escape_string 함수를 제공합니다. 변수가 많은 경우 각각 mysql_real_escape_string을 거쳐야 합니다.
대신 매우 귀찮아집니다.
3.pdo는 전처리 기능을 지원하므로 SQL 삽입을 효과적으로 방지하고 효율성을 높일 수 있습니다.
4.php_mysqli와 pdo는 모두 객체 지향을 지원합니다.
5.pdo 긴 연결 방식이 php_mysqli보다 성능이 좋습니다(온라인 정보 참고)
php_mysql 방식의 장점은 더 이상 크지 않으며, php_mysqli의 가장 치명적인 점은 데이터베이스를 변경하지 않을 것이라는 확신이 없으면 다른 데이터베이스로 이식할 수 없다는 것입니다. 분명히 데이터베이스에 연결하는 pdo 방법이 추세가 될 것입니다.
pdo 간단한 데이터베이스 작업:
먼저 php는 php-pdo 관련 확장을 활성화해야 합니다
<?php $dbType = 'mysql'; $dbUser = 'root'; $dbPass = 'simael'; $dbhost = 'localhost'; $dbName = 'pdotest'; $dsn="$dbType:host=$dbhost;dbname=$dbName"; try{ $pdo = new PDO($dsn, $dbUser, $dbPass); echo "PDO成功连接MySQL数据库!"; }catch(PDOException $exception){ echo $exception->getMessage(); }
데이터 삽입
<?php //$pdo->query('set names utf8'); $sql = "INSERT INTO la_comments SET nick_name='formPdo',email='pdo@pdo.com',comment='中文comment',page_id='11',created_at=NOW(),updated_at=NOW()"; $res1 = $pdo->exec($sql); var_dump($res1);
이때 데이터베이스에 가보니 여러 가지 코딩 문제로 인해 한자가 깨질 수 있는 것을 봤습니다
코드 추가
$pdo->query('set names utf8');
온라인에서 정리한 주의가 필요한 코딩 문제는 다음과 같습니다. :
1. 서버 프로그램은 header("Content-type: text/html; charset=utf-8")와 같은 인코딩을 선언합니다.
2. 클라이언트는 다음과 같은 인코딩을 선언합니다.
3. 데이터베이스 인코딩, 테이블 및 필드 인코딩
4. 파일 자체의 인코딩 속성
5. 데이터베이스에 연결할 때 $ pdo->query('set names utf8');
과 같이 인코딩을 선언해 주세요. 문제는 일반적으로 해결될 것입니다.
전체 샘플 코드: (파일 자체도 utf8로 인코딩되어야 함)
$dbType = 'mysql'; $dbUser = 'root'; $dbPass = 'simael'; $dbhost = 'localhost'; $dbName = 'pdotest'; $dsn="$dbType:host=$dbhost;dbname=$dbName"; try{ $pdo = new PDO($dsn, $dbUser, $dbPass,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES'utf8';")); //$pdo = new PDO($dsn, $dbUser, $dbPass); echo "PDO成功连接MySQL数据库!"; }catch(PDOException $exception){ echo $exception->getMessage(); } $pdo->query('set names utf8'); $sql = "INSERT INTO la_comments SET nick_name='formPdo',email='pdo@pdo.com',comment='中文comment',page_id='11',created_at=NOW(),updated_at=NOW()"; $res1 = $pdo->exec($sql); var_dump($res1); $sql = "SELECT * FROM la_comments"; $res2 = $pdo->query($sql); while($row = $res2->fetch()){ print_r($row); echo '
'; } $pdo = null; ?>
위 내용을 포함하여 php pdo의 간단한 사용법(1)을 소개하고 있는데, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.