관련 학습 권장 사항: mysql 튜토리얼, php 프로그래밍
이전 튜토리얼에서는 PHP에 내장된 Mysqli 확장 기능을 통해 MySQL 데이터베이스와 상호 작용하는 방법을 소개했습니다. 또 다른 PHP 내장 데이터베이스 확장인 PDO를 살펴보세요. 전체 이름은 PHP 데이터 개체, 즉 PHP 데이터 개체입니다.
PDO는 PHP가 데이터베이스에 액세스하기 위한 가볍고 일관된 인터페이스를 정의하므로 자체적으로 데이터베이스 상호 작용 기능을 구현할 수 없는 데이터 액세스 추상화 계층을 제공합니다. 특정 데이터베이스에 대한 PDO를 사용해야 합니다. 이러한 특정 데이터베이스 드라이버에는 MySQL, PostgreSQL, SQLite, SQL Server, Oracle 등이 포함됩니다. 따라서 PDO는 보다 표준적이고 보다 일반적인 데이터베이스 확장이며 현재 다양한 분야에서 완전히 객체 지향적입니다. 주류 PHP 프레임워크에서 PDO는 PDO 확장을 기반으로 데이터베이스 액세스 기능을 제공하는 Laravel 프레임워크를 포함하여 데이터베이스 상호 작용을 구축하기 위한 기본 구성 요소가 되었습니다.
PDO 확장에 대한 모든 통합 지원을 이전에 권장했던 PHP 로컬 통합 개발 환경(다음은 Laragon의 사전 설치된 PHP 확장입니다):
그리고 PDO
를 제외하고 이를 볼 수 있습니다. > 확장자 또한 일치하는 특정 데이터베이스 확장 pdo_mysql
이 있습니다. 이 특정 확장자를 통해서만 MySQL 데이터베이스에 액세스할 수 있습니다. 또한 PDO는 통합된 데이터베이스 액세스 인터페이스를 제공하므로 PDO 인터페이스를 구현하는 특정 데이터베이스 확장은 정확히 동일한 방식으로 데이터베이스에 액세스할 수 있습니다. 이러한 방식으로 애플리케이션이 데이터베이스를 전환해야 하는 경우 데이터베이스를 재구성할 필요가 없습니다. 연산 코드를 기반으로 하면 MySQLi 확장을 버리고 PDO를 수용할 수 있습니다. PDO
扩展外,还有一个与之匹配的具体数据库扩展 pdo_mysql
,有了这个具体扩展,才能访问 MySQL 数据库。另外,PDO 提供了统一的数据库访问接口,所以实现了 PDO 接口的具体数据库扩展可以通过完全一样的方法访问数据库,这样一来,如果应用需要切换数据库,就不需要对数据库操作代码进行重构,仅凭这一点,就可以扔掉 MySQLi 扩展,投入 PDO 的怀抱了。
如果安装过 Laradock,可以启动 workspace
容器,然后查看其预装的 PHP 扩展,可以看到,它包含更多的具体 PDO 数据库驱动支持:
其中 pdo_pgsql
表示 PostgresSQL 数据库驱动,pdo_sqlite
表示 SQLite 数据库驱动。
在我们的教程中,还是选择以 MySQL 为例进行演示。
要通过 PDO 扩展建立数据库连接,直接实例化 PDO 对象即可,我们编写一段简单的示例代码如下(在 php_learning/mysql
目录下新建 pdo.php
存储代码):
<?php // 设置连接属性 $dsn = 'mysql:host=127.0.0.1;port=3306;dbname=test;charset=utf8mb4'; $user = 'root'; $pass = 'root'; try { // 建立连接 $pdo = new PDO($dsn, $user, $pass); // 执行 SQL 查询 $sql = $pdo->quote('SELECT * FROM `post` ORDER BY `id` DESC'); $res = $pdo->query($sql); // 打印查询结果 echo '<pre class="brush:php;toolbar:false">'; foreach ($res as $row) { print_r($row); } } catch (PDOException $exception) { // 如果数据库操作出现异常,则捕获并打印 printf("Error: %s\n", $exception->getMessage()); } finally { // 释放 PDO 连接实例 $pdo = null; }
在实例化 PDO 对象创建数据库连接时,至少需要传入三个字符串类型参数,第一个参数包含了数据库主机信息,比如数据库驱动类型(这里是 mysql
)、IP地址(本地地址是 127.0.0.1
)、端口号(可选,默认是 3306
)、要连接的数据库名称(test
)、字符编码信息(utf8mb4
)等,第二个参数是用户名,第三个参数是密码。
接下来,我们就可以调用 PDO 对象实例 $pdo
上的 query 方法执行指定 SQL 语句与数据库进行交互了(增删改查),不过在此之前,我们先调用了 quote 方法对查询 SQL 语句进行转义,该函数的功能类似 mysqli_escape_string
。
执行完 SQL 查询后,会返回一个查询结果集,可以通过循环遍历打印该结果。
此外,通过 PDO 扩展进行数据库连接和查询操作如果出现错误,会抛出异常,为了增加程序的健壮性,我们在通过 try...catch...
语句捕获 PDOException
异常,并打印错误信息,最后通过 finally
语句释放 PDO 对象实例,因为该语句块不管是否抛出异常都会执行。
运行 php -S localhost:9000
启动内置 HTTP 服务器进行测试,在浏览器中访问 http://localhost:9000/mysql/pdo.php
,即可看到正常的打印结果:
我们修改下上述代码中的连接信息,比如将密码值调整为 test
workspace
컨테이너를 시작한 다음 사전 설치된 PHP 확장을 볼 수 있으며 여기에는 보다 구체적인 PDO 데이터베이스 드라이버 지원이 포함되어 있음을 확인할 수 있습니다.
여기서pdo_pgsql
은 PostgresSQL을 나타냅니다. 데이터베이스 드라이버,pdo_sqlite
는 SQLite 데이터베이스 드라이버를 나타냅니다. 데이터베이스 연결 및 기본 쿼리 설정🎜🎜튜토리얼에서는 여전히 MySQL을 데모용 예로 사용하도록 선택합니다. 🎜🎜PDO 확장을 통해 데이터베이스 연결을 설정하려면 PDO 개체를 직접 인스턴스화하기만 하면 됩니다. 다음과 같이 간단한 샘플 코드를 작성합니다(php_learning/mysql
디렉터리에pdo.php
생성). > 스토어 코드): 🎜rrreee🎜 데이터베이스 연결을 생성하기 위해 PDO 객체를 인스턴스화할 때 최소 3개의 문자열 유형 매개변수가 전달되어야 합니다. 첫 번째 매개변수에는 데이터베이스 드라이버 유형과 같은 데이터베이스 호스트 정보가 포함됩니다(여기서는입니다) mysql
), IP 주소(로컬 주소는127.0.0.1
), 포트 번호(선택 사항, 기본값은3306
), 데이터베이스 이름 연결(test
), 문자 인코딩 정보(utf8mb4
) 등. 두 번째 매개변수는 사용자 이름, 세 번째 매개변수는 비밀번호입니다. 🎜🎜다음으로 PDO 객체 인스턴스$pdo
에서 쿼리 메서드를 호출하여 지정된 SQL 문을 실행하여 데이터베이스와 상호 작용(추가, 삭제, 수정, 쿼리)할 수 있지만 그 전에는 먼저 quote 쿼리 SQL 문을 이스케이프하는 메서드를 호출합니다. 이 함수의 기능은mysqli_escape_string
과 유사합니다. 🎜🎜SQL 쿼리를 실행하면 쿼리 결과 세트가 반환되며, 이는 루프 탐색을 통해 인쇄할 수 있습니다. 🎜🎜또한 PDO 확장을 통한 데이터베이스 연결 및 쿼리 작업에서 오류가 발생하면 프로그램의 견고성을 높이기 위해try...catch를 통해 문. code>PDOException
예외를 처리하고 오류 정보를 출력하며, 마지막으로finally
문을 통해 PDO 개체 인스턴스를 해제합니다. 예외가 발생하는지 여부. 🎜🎜php -S localhost:9000
을 실행하여 테스트용 내장 HTTP 서버를 시작하고 다음에서http://localhost:9000/mysql/pdo.php
에 액세스합니다. 즉, 정상적인 인쇄 결과를 볼 수 있습니다: 🎜🎜 🎜🎜위 코드에서 연결 정보를 수정합니다. 예를 들어 비밀번호 값을test
로 조정합니다. 이때 PDO 예외가 캡처되고 오류 메시지는 다음과 같습니다. 인쇄됨: 🎜🎜🎜🎜🎜🎜참고: 오류 정보의 IP 주소는 MySQL Docker 컨테이너 내부의 IP 주소입니다. 이 오류는 IP 주소 문제가 아니라 잘못된 비밀번호로 인해 발생합니다. 🎜
더 많은 관련 글을 알고 싶다면 php mysql 칼럼을 주목해주세요!
위 내용은 기본적인 사용을 위해 PDO 확장을 통해 MySQL 데이터베이스와 상호작용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!