programing

PHP PDO 대 normal mysql_connect

newsource 2023. 11. 1. 22:22

PHP PDO 대 normal mysql_connect

PHP에서 데이터베이스 쿼리를 실행하려면 php PDO 또는 normal mysql_connect를 사용해야 합니까?

어느 쪽이 더 빠릅니까?

PDO의 가장 큰 이점 중 하나는 인터페이스가 여러 데이터베이스에 걸쳐 일관적이라는 것입니다.준비된 문장을 위한 멋진 기능들도 있는데, 이것은 당신의 모든 쿼리 문자열을 빠져나가는 번거로움을 덜어줍니다.PDO의 휴대성이 mysql_connect보다 큽니다.

그렇다면 PDO를 사용해야 합니까 아니면 기존의 mysql_connect를 고수해야 합니까?

PDO는 mysql_*보다 약간 느리지만 휴대성이 뛰어납니다.PDO는 여러 데이터베이스에 걸쳐 단일 인터페이스를 제공합니다.즉, msql은 msql_query, MSsql은 msql_query 등을 사용하지 않고 여러 DB를 사용할 수 있습니다.$db->query() 같은 것만 사용하면 됩니다.INSERT INTO...")를 항상 사용합니다.어떤 DB 드라이버를 사용하든 상관 없습니다.

따라서 더 크거나 휴대용인 프로젝트 PDO가 좋습니다.젠드 프레임워크도 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

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

PDO를 사용하는 모든 이유를 직접 말씀하셨습니다.실제로 mysql_* 함수를 직접 사용하거나 PDO를 사용하거나 다른 라이브러리를 사용하지 마십시오.

  • PDO를 사용하면 바인딩된 매개 변수를 사용할 수 있으며 대부분의 sql 주입 공격을 방지할 수 있습니다.
  • PDO 준비된 문을 사용하면 속도를 높일 수 있습니다.
  • 모든 DB 백엔드에 대한 표준 인터페이스
  • fetch* 계열과 같은 유용한 방법이 많이 있습니다.

PDO를 사용할 때 사람들이 원하는 것은 속도라고 생각하지 않습니다. 차이가 있는지는 모르겠지만, 솔직히 신경 쓰지 않습니다. 페이지를 생성할 때 데이터베이스에 몇 개의 쿼리를 수행하는 한 PHP 쪽에서 몇 밀리초 정도면 아무것도 변경되지 않습니다.

PDO에는 다음과 비교하여 두 가지/세 가지 훌륭한 점이 있습니다.

  • 데이터베이스 간에 일정한 인터페이스를 제공하므로 사용하는 것보다 낫습니다.mysql_*,pg_*,oci_*, ...
  • Object-Oriented API(mysqli_*OO-API가 있지만 그렇지 않음)
  • MySQL >= 4.1의 새로운 기능을 지원합니다. (와 동일하지만, 다시는 그렇지 않습니다.)

BTW: 저는 일반적으로 PDO를 사용하고 있습니다. 즉 "손으로" 사용하거나 Zend Framework 및/또는 Detrine에 통합되어 사용되기 때문입니다.


참고 사항 : PDO를 사용하지 않을 경우에도 mysql 대신 mysqli를 사용하는 것이 좋습니다.

그것에 대해서는 PHP 매뉴얼의 이 페이지를 참조하세요.

준비된 문과 일반적인 직접 쿼리(Mysqlnd 및 MyISAM 테이블의 select 문을 사용하여 테스트)를 모두 사용하여 Mysqli 함수와 PDO 함수를 비교하기 위해 성능 테스트를 수행했습니다.

저는 PDO 쿼리가 Mysqli보다 약간 느릴 뿐이지만 약간 느릴 뿐이라는 것을 발견했습니다.이러한 목적으로 사용된 PDO는 대부분 Mysqli 함수를 호출하는 래퍼에 불과하므로 이는 타당합니다.PDO를 사용하면 함수 이름이 MySQL에만 국한되지 않기 때문에 다른 데이터베이스로 마이그레이션하는 것이 조금 더 쉬워집니다.

실제 성능 차이는 준비된 쿼리를 사용하느냐 여부입니다.준비된 쿼리를 사용하는 것은 성능에 큰 영향을 미칩니다.실험을 해본 다른 사람들도 같은 결과를 발견했습니다.

준비된 쿼리가 더 빠른 유일한 시간은 쿼리를 한 번 준비한 다음 서로 다른 데이터 값으로 수천 번 제출하는 경우입니다.그렇지 않으면 항상 mysqli::query() 또는 PDO::query()를 사용하는 것이 더 빠릅니다.그러나 이러한 함수는 데이터 값을 벗어나지 않으므로 데이터 변수에 mysqli::real_escape_string() 또는 PDO::quote()를 사용해야 합니다.

할 수 없는 특별한 이유가 없는 한 일반적으로 PDO를 사용하는 것을 추천합니다.둘 사이에 별 차이가 없고 굳이 PDO를 사용하지 않을 이유가 없다면 단순히 mysql_*가 있다고 해서 사용하는 것보다 응용 프로그램에서 DB 추상화를 사용하는 연습을 시작하는 것이 더 나을 것이라고 생각합니다.저는 최선의 연습이 이기게 해주세요.

두 경우 모두 동일한 php 서버에서 동일한 mySQL 서버를 호출합니다...그래서 당신은 많은 차이를 알아채지 못합니다.

좋은 성능을 원한다면 캐시(memcache 또는 단순 PHP 파일...)를 생각하고 좋은 데이터베이스 구조(INDEX...)를 만들어 보십시오.

  • PDO가 SQL보다 우수합니다.
  • PDO 및 그의 준비문 SQL 주입에 대비한 최상의 보안 코드 제공
  • PDO가 Object Oriented ;)
  • PDO는 앞에서 설명한 대로 일부 데이터베이스 엔진과 호환됩니다.
  • MySQL_*가 더 이상 사용되지 않으므로 곧 제거됩니다.
  • PDO는 더 적은 코드 라인으로 더 많은 기능을 제공합니다. 예:

    프도

    1. 연결하다
    2. "<" 및 ">" 및 "#" 확인 (글로벌 용도로 사용하는 경우 이 확인)
    3. 준비한다.
    4. 실행
    5. 가까운.

MySQL_*

  1. 연결하다
  2. 백슬래시 추가
  3. 엑스세이프
  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는 장점이 많습니다.

언급URL : https://stackoverflow.com/questions/1402017/php-pdo-vs-normal-mysql-connect