문제

PHP PDO 또는 Normal MySQL_Connect를 사용하여 PHP에서 데이터베이스 쿼리를 실행해야합니까?

어느 것이 더 빠르나요?

PDO의 큰 이점 중 하나는 인터페이스가 여러 데이터베이스에서 일관성이 있다는 것입니다. 준비된 진술에 대한 멋진 기능도 있습니다. PDO의 이식성은 MySQL_Connect보다 큽니다.

그렇다면 그러한 이유로 PDO를 사용해야합니까, 아니면 전통적인 MySQL_Connect를 고수해야합니까?

도움이 되었습니까?

해결책

PDO는 MySQL_*보다 약간 느리지 만 휴대 성이 뛰어납니다. PDO는 여러 데이터베이스에서 단일 인터페이스를 제공합니다. 즉, MySQL 용 MySQL_Query, MS SQL 등의 MSSQL_Query를 사용하지 않고 여러 DB를 사용할 수 있습니다. 항상 $ db-> query ( "삽입 ...")와 같은 것을 항상 사용하십시오. 어떤 DB 드라이버를 사용하든 상관 없습니다.

따라서 더 크거나 휴대용 프로젝트의 경우 PDO가 바람직합니다. Zend 프레임 워크조차도 pdo를 사용합니다.

다른 팁

일부 빠른 타이밍은 PDO가 연결이 약간 빠릅니다.

$start = microtime(true);
for($i=0; $i<10000; ++$i) {

    try {
        $db = new PDO($dsn, $user, $password);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage()."\n";
    }
    $db = null;
}

$pdotime = microtime(true) - $start;
echo "PDO time: ".$pdotime."\n";

$start = microtime(true);
for($i=0; $i<10000; ++$i) {
    $db = mysql_connect($host, $user, $password);
    if(!$db) {
        echo "Connection failed\n";
    }
    if(!mysql_select_db($schema, $db)) {
        echo "Error: ".mysql_error()."\n";
    }
    mysql_close($db);
}

$rawtime = microtime(true) - $start;
echo "Raw time: ".$rawtime."\n";

같은 결과를 제공합니다

PDO time: 0.77983117103577
Raw time: 0.8918719291687

PDO time: 0.7866849899292
Raw time: 0.8954758644104

PDO time: 0.77420806884766
Raw time: 0.90708494186401

PDO time: 0.77484893798828
Raw time: 0.90069103240967

어쨌든 속도 차이는 무시할 수 있습니다. 네트워크 연결을 설정하는 데 특히 MySQL 서버가 다른 호스트에있는 경우 PDO가 발생한 오버 헤드보다 훨씬 오래 걸릴 수 있습니다.

PDO를 직접 사용해야하는 모든 이유를 언급했습니다. 실제로 MySQL_* 함수를 직접 사용하거나 PDO를 사용하거나 사용하지 마십시오. 약간 다른 도서관.

나는 속도가 PDO를 사용할 때 사람들이 찾고있는 것이라고 생각하지 않습니다. 차이가 있는지 모르겠습니다. 페이지를 생성 할 때 데이터베이스는 PHP 측의 몇 밀리 초가 변경되지 않습니다.

PDO에는 두 가지/세 가지 좋은 점이 있습니다. mysql_* :

  • 다소 일정한 인터페이스 accross 데이터베이스; 사용하는 것보다 낫습니다 mysql_*, pg_*, oci_*, ...
  • 객체 지향 API (mysqli_* OO-API가 있지만 그렇지 않습니다 mysql_*)
  • MySQL> = 4.1의 새로운 기능을 지원합니다 (동일 mysqli_*, 하지만 mysql_*, 다시)

BTW : 저는 일반적으로 PDO를 사용하고 있습니다 - "손으로"또는 통합 / 사용합니다. Zend 프레임 워크 및/또는 교의.


Sidenote로 : PDO를 사용하지 않더라도 MySQL 대신 MySQLI를 사용하는 것이 좋습니다.

보다 PHP 매뉴얼 의이 페이지, 그것에 대해.

  • PDO를 사용하면 Bind Params를 사용할 수 있으며 대부분의 SQL 주입 공격을 방지합니다.
  • PDO 준비된 진술을 사용하여 더 빠른 속도를 얻을 수 있습니다.
  • 모든 DB 백엔드에 대한 표준 인터페이스
  • 유용한 방법이 많이 있습니다 (Fetch* Family와 같은)

준비된 명령문과 정기 직접 쿼리 (MySQLND 및 MyISAM 테이블에서 선택 문서를 사용하여 테스트)를 사용하여 MySQLI 기능을 PDO 함수와 비교하기 위해 성능 테스트를 수행했습니다.

나는 pdo 쿼리가 MySQLI보다 약간 느리지 만 약간만 느린다는 것을 알았습니다. PDO 가이 목적에 사용 된 PDO가 주로 MySQLI 기능을 호출하는 래퍼 일뿐입니다. PDO를 사용하는 데있어 장점은 기능 이름이 MySQL에만 국한되지 않기 때문에 다른 데이터베이스로 마이그레이션하는 것이 조금 더 쉽다는 것입니다.

실제 성능 차이는 준비된 쿼리를 사용하는지 여부입니다. 크고 중요한 성능이 있습니다 패널티 준비된 쿼리를 사용합니다. 테스트 한 다른 사람들도 같은 결과를 발견했습니다.

준비된 쿼리가 더 빠른 시간은 쿼리를 한 번 준비한 다음 다른 데이터 값으로 수천 번 제출하는 경우입니다. 그렇지 않으면 mysqli :: query () 또는 pdo :: query ()를 사용하는 것이 항상 빠릅니다. 그러나 이러한 기능이 귀하를 위해 데이터 값을 벗어나지 않는다는 것을 인식하는 것이 중요하므로 데이터 변수에서 mysqli :: real_ Escape_ String () 또는 pdo :: quote ()를 사용해야합니다.

구체적인 이유가 없다면 일반적으로 PDO를 사용하는 것이 좋습니다. 둘 사이에 약간의 차이가없고 PDO를 사용하지 않을 이유가 없다면, 단순히 MySQL_*를 사용하는 것보다 응용 프로그램에서 DB 추상화를 사용하는 것이 더 낫다고 생각합니다. 모범 사례를 이기게하겠습니다.

두 경우 모두 동일한 PHP 서버에서 동일한 MySQL 서버를 호출하므로 많은 차이를 알 수 없습니다.

좋은 성능을 원한다면 캐시 (Memcache 또는 간단한 PHP 파일 ...)에 대해 생각하고 좋은 데이터베이스 구조 (색인 ...)를 만드십시오.

  • PDO는 SQL보다 낫습니다
  • PDO와 그의 준비 설명은 SQL 주입에 대한 최고의 보안 코드를 제공합니다.
  • pdo는 객체 지향적이다;)
  • PDO는 이전에 설명한대로 일부 데이터베이스 엔진과 호환됩니다.
  • mysqll_*는 더 이상 사용되지 않으며 곧 제거됩니다
  • PDO는 적은 코드 라인으로 더 많은 기능을 제공합니다. 예 :

    pdo

    1. 연결하다
    2. "<"및 ">"및 "#"을 확인하십시오 (이 글로벌 사용 검사)
    3. 준비하다
    4. 실행하다
    5. 닫다

mysql_*

  1. 연결하다
  2. 백 슬래시를 추가하십시오
  3. xsafe
  4. "<"및 ">"및 "#"을 확인하십시오 (이 글로벌 사용 검사)
  5. 질문
  6. 닫다

동일한 기능이지만 코드를 비교하면 PDO가 인간적으로 읽을 수 있습니다 :) 그래서 당신의 생각은 무엇입니까?

성능이 "실제 문제"가 아닌 경우 PDO를 사용해야합니다. 성능은 작은 마진에 따라 다르며 PDO는 매우 멋지고 휴대용 교차-다이사베이스 인터페이스를 가지고 있으며 여러 데이터베이스 드라이버를 사용해야하는 경우 두통을 절약 할 수 있습니다.

그만큼 mysql_connect 기능은 PHP 5.5.0으로 더 이상 사용되지 않으며 대부분의 감가 상각 된 기능과 마찬가지로 제거됩니다. 따라서 사용을 선호합니다 PDO_MYSQL (또는 다른 대안 mysqli ) 위에 mysql_connect.

원천: http://php.net/manual/en/function.mysql-connect.php

PDO의 몇 가지 장점 :

  1. 여러 데이터베이스에 액세스 할 수 있습니다.
  2. 다른 데이터베이스와 연결하기 위해 많은 데이터베이스 드라이버를 제공했습니다.
  3. 하나의 데이터베이스에서 다른 데이터베이스로 전환 할 때 새 데이터베이스에 연결하기 위해 모든 코드를 작성하지 않아도됩니다. 연결 문자열과 새 데이터베이스에 필요한 일부 쿼리 만 변경하십시오.
  4. 그것은 한 번만 컴파일 된 쿼리 템플릿 인 준비 명령문을 제공하며, 장소-홀더라고하는 속성을 변경함으로써 원하는만큼 실행할 수 있습니다.
  5. 쉽고 효율적인 일반 작업과 같은 삽입, 업데이트 ... 등.

PDO 데이터베이스 연결 코드 :

<?php
$dbhost = 'localhost';
$dbname = 'clsrepair';
$dbuser = 'root';
$dbpass = '';

try {
    $db = new PDO("mysql:host={$dbhost};dbname={$dbname}",$dbuser,$dbpass);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}

catch(PDOException $e) {
    echo "Connection error: ".$e->getMessage();
}
?>

정상 MySQL 데이터베이스 연결 코드 :

<?php 
mysql_connect("localhost","root", "");
mysql_select_db ("clsrepair");
?>

또는

 <?php
$dbHost = 'localhost'; // usually localhost
$dbUsername = 'root';
$dbPassword = '';
$dbDatabase = 'clsrepair';
$db = mysql_connect($dbHost, $dbUsername, $dbPassword) or die ("Unable to connect to Database Server.");
mysql_select_db ($dbDatabase, $db) or die ("Could not select database.");
?>

MySQL 데이터베이스 연결 코드는 쉽지만 PDO는 많은 이점이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top