sourcetip

PHP PDO 및 MySQLi

fileupload 2023. 11. 4. 13:15
반응형

PHP PDO 및 MySQLi

저는 방금 PHP의 소개 과정을 마쳤고, 스택 오버플로우 포럼 내내 사람들은 PDO, 준비된 문 또는 MYSQLi로 전환할 것을 추천했습니다. 설명서를 잠시 확인했지만 대부분은 제 머리 위로 넘어갔습니다.

나는 지금까지 mysql_* 함수를 사용해왔기 때문에 이 개념들은 나에게 새로운 것입니다.데이터베이스 특정 작업에 액세스하고 수행하는 데 사용되는 것 같은데 잘 모르겠습니다.

그렇다면 PDO, 준비된 문과 MySQLi의 차이점은 무엇입니까? 같은 작업을 수행하는 서로 다른 기능입니까?스크립트에서 호환되나요, 아니면 "한쪽을 선택하거나 다른쪽을 선택"하나요?그리고 마지막으로 최고의 성능을 제공하는 것은 무엇입니까?

업데이트: 답변 감사합니다. 더 많은 PDO 튜토리얼을 찾아보겠습니다.

참고로 다음 게시물도 유용했습니다.

빠르고 가벼운 것 - mysqli와 PDO 중 어느 것입니까?

mysqli 또는 PDO - 장단점은 무엇입니까?

기본 수준에서 mysql, mysqli 및 PDO 확장자는 모두 데이터베이스와 어떻게 대화합니까?이들은 모두 데이터베이스에 연결하고 데이터베이스에서 데이터를 보내고 가져올 수 있는 기능과 기능을 제공합니다.데이터베이스에 대한 여러 연결을 동시에 설정할 수 있지만, 이는 일반적으로 말도 안 되는 일입니다.

mysql*은 기본적으로 데이터베이스에 연결하고 SQL 쿼리를 전송할 수 있는 매우 간단한 확장입니다.
mysqli는 (이름에서 알 수 있듯이) 매개 변수화된 쿼리와 몇 가지 다른 것들을 믹스에 추가함으로써 이것을 개선합니다.
PDO는 여러 데이터베이스 드라이버를 하나의 패키지로 추상화하는 확장으로, 데이터베이스를 전환할 때(적어도 이론적으로는) 데이터베이스 특정 확장을 사용하거나 코드를 다시 쓸 필요 없이 동일한 코드를 사용하여 MySQL, Oracle, MS SQL Server 및 기타 여러 데이터베이스에 연결할 수 있습니다.매개 변수화된 쿼리도 지원합니다.

MySQL을 독점적으로 사용할 것을 알고 있다면 mysqli를 선택하는 것이 좋습니다.특히 절차적인 방법으로 사용할 수 있기 때문에 mysql 확장자에서 이미 익숙한 것을 사용할 수 있습니다.OOP에 익숙하지 않다면 도움이 됩니다.그렇지 않으면 PDO는 객체 지향적이고 유연한 데이터베이스 커넥터입니다.


* mysql 확장자는 이제이상 사용되지 않으며 나중에 언젠가 제거될 것입니다.그것은 그것이 고대적이고, 나쁜 관행들로 가득 차 있고, 현대적인 특징들이 결여되어 있기 때문입니다.새 코드를 쓸 때 사용하지 마십시오.

PDO는 "PHP 데이터 개체"입니다.저는 주로 PDO를 사용하기 때문에 PDO의 장점에 대해서만 말할 수 있습니다.

  • MySQL보다 더 많은 데이터베이스에서 작동 가능(중요하지 않을 수 있음)
  • 컴파일된 C, 그래서 더 빠릅니다 (추정)
  • 준비된 진술서(다른 진술서들은 이것들을 가지고 있습니다.)
  • 그래서 마음에 드는 것 같으니 적어도 여기서 많은 도움을 받을 수 있을 겁니다.
  • 즉시 설정 및 변경할 수 있는 다양한 페치/오류 처리 모드

네가 묻는다

그렇다면 PDO, 준비된 문과 MySQLi의 차이점은 무엇입니까?

PDO그리고.MySQLiDB 포장지입니다."준비된 진술"은 완전히 다른 개념입니다.여러 번 실행할 수 있는 쿼리를 준비할 수 있으며 매개 변수가 적절하게 지정된 문은 SQL-Injection(증명은 아니지만 SQL-Injection) 안전합니다.후자의 이유는 대부분 PDO(또는 MySQLi)를 사용해야 하는 이유이지만 준비된 문은 쿼리에 명확성을 제공하기도 합니다.

/* mysql_* version */
mysql_connect("host");
$query = "SELECT column FROM db1.t1 WHERE id = ";
foreach ($_GET['id'] as $id) {
   $id = mysql_real_escape_string($id);
   $result = mysql_query($query . "'$id'";
   while ($row = mysql_fetch_assoc($result)) {
      echo "$row[column]\n";
   }
}
//NOTE: it would probably be better to store the resource returned by
//mysql_connect and use that consistently (in query/escape)

/* PDO version */
$pdo = new PDO('mysql:host=HOST', 'user', 'pass');
$query = $pdo->prepare("SELECT column FROM db1.t1 WHERE id = ?";
foreach ($_GET['id'] as $id) {
   $query->execute($id);
   echo $query->fetch(PDO::FETCH_COLUMN);
}
//Notice that you skip the escape step.

기본적으로 동일한 작업을 수행할 수 있습니다.MySQLi, 하지만 전 더 좋아요PDO의 구문.그게 더 빠를 수도 있지만, 제가 지어낼 수도 있습니다.PEAR도 있고요.MDB2그런 얘기는 거의 안 나오고 더 많이 나올 겁니다부터PDO내장되어 있어요, 저는 그것으로 하겠습니다.

당신이 익숙하다면.mysql_xxx기능들, 그리고 나서 나는 그것으로 이동하는 것으로 시작할 것입니다.MySQLi대신에 연장합니다.

원하는 경우 PDO를 대신 사용할 수도 있지만, 이는 여러 데이터베이스를 지원해야 할 경우 처음에만 가치가 있습니다.따라서 MySQLi로 전환하는 것이 더 쉬워지고 PDO의 이점을 바로 얻을 수 없기 때문입니다.

MySQLi에서 사용할 수 있는 기능은 거의 유사합니다.mysql_xx사용자가 익숙한 함수입니다. 일반적으로 기존 코드를 가져가서 직접 스왑하는 것이 가능하며 코드는 계속 정상적으로 작동합니다.

시작하기에 좋은 방법입니다. 코드를 사용하여mysqli_xxxmysql_xxx' 대신에

가능하다면 절차 구문보다는 객체지향 구문을 사용하는 것이 좋습니다.MySQLi는 두 가지를 모두 지원하며 절차 구문은 사용자가 익숙한 것에 더 가깝지만, 장기적으로는 OO 구문이 더 유연하며, 실제로 사용자가 익숙해지면 크게 다르지 않습니다.

MySQLi 라이브러리를 사용하는 것으로 코드가 변환되고 기본 사항에 대한 만족도가 높아지면 준비된 설명문과 같은 고급 기능을 사용할 수 있습니다.하지만 일단 기본적인 것부터 편하게 생각하세요.

당신과 같은 관점에서.제 입장에서는 (용도에 따라) 차이가 별로 없다고 생각합니다.PDO는 단순히 다른 데이터베이스 api의 모든 것을 하나로 병합하는 데이터베이스 api인 것 같습니다.따라서 MS Sql 서버와 MySql 서버에 연결해야 할 경우 PDO api를 호출하여 특정 db의 드라이버를 지정하면 됩니다.또한 MySQL의 향후 기능과 능력은 PDO에서만 사용할 수 있을 것이라고 생각합니다.따라서 기본적으로 PDO를 사용하여 모든 최신 기능에 액세스할 수 있습니다.

PDO의 큰 장점 중 하나는 플랫폼 독립성입니다.즉, 모든 함수 호출을 다시 녹음할 필요 없이 어느 시점에 다른 DBMS로 마이그레이션할 수 있습니다.이것은 일반적으로 Java(JDBC를 통해), .Net(ADO) 및 대부분의 다른 환경에서 작업이 수행되는 방식입니다.DBMS 자체를 전환할 수 있다는 것뿐만 아니라, 학습할 수 있는 API가 하나밖에 없다는 것이 장점입니다.

귀하의 질문과 관련하여 PDO 계층은 준비된 진술을 수행할 수 있는 기능을 제공합니다.준비된 문 뒤에 있는 개념은 실행 시간이 지나야 알 수 있는 SQL 문의 부분에 대한 자리 표시자를 만드는 것입니다.많은 학습자들이 SQL을 문자열로 생성하는 것으로 시작하며, 이 문자열은 mysqli::query($someQuery)라고 불러 실행됩니다.이는 여러 가지 이유로 문제가 되며, 그 중 가장 눈에 띄는 것은 SQL 주입에 대한 취약성입니다(유사한 질문과 답변은 stackoverflow.com/questions/5315351 참조).PDO를 사용하면 SQL 주입과 따옴표, 백슬래시 등의 문자 처리 문제를 모두 피할 수 있습니다.결과적으로 코드가 더 안전하고 판독 가능하며 예측 가능합니다.

mysqli를 사용하는 방법을 이미 파악했다면 PDO를 사용하는 것도 크게 다르지 않습니다.위의 링크된 질문 및 답변은 유용한 가이드 역할을 해야 하는 PDO 준비문을 사용하여 제출된 쿼리의 예를 보여줍니다.

그렇다면 PDO, 준비된 문과 MySQLi의 차이점은 무엇입니까? 같은 작업을 수행하는 서로 다른 기능입니까?

그 차이는 꽤 간단합니다.
PDO준비된 문과 함께 사용할 수 있고 mysqli는 사용할 수 없습니다.

네이티브 준비된 문을 사용하여 두 API로 몇 가지 일반적인 쿼리를 실행하면 그 차이를 명확하게 알 수 있습니다.

언급URL : https://stackoverflow.com/questions/10703426/php-pdo-and-mysqli

반응형