백엔드 개발 PHP 튜토리얼 PHP中PDO的使用方法_PHP教程

PHP中PDO的使用方法_PHP教程

Jul 13, 2016 pm 05:48 PM
pdo php 한 번 아니요 사용 사용방법 설치하다 시작 요약 ~의 첫 번째 단순한

本文不涉及PDO的安装,只是简单总结一下PDO的使用。

开始构造第一个PDO应用,在Web文档目录下创建一个pdo.php文件:

[php]
$dsn = "mysql:host=localhost;dbname=test"; 
$db = new PDO($dsn, 'root', ''); 
$count = $db->exec("INSERT INTO foo SET name = 'lix',gender='mail',time=NOW()"); 
echo $count; 
$db = null; 
?> 
$dsn = "mysql:host=localhost;dbname=test";
用来构造DSN(数据源),里面的信息包括:数据库类型是mysql,主机地址是localhost,数据库名称是test,就这么几个信息。不同数据库的数据源构造方式是不一样的。

$db = new PDO($dsn, 'root', '');
初始化一个PDO对象,构造函数的参数第一个就是我们的数据源,第二个是连接数据库服务器的用户,第三个参数是密码。

$count = $db->exec("INSERT INTO foo SET name = 'lix',gender='mail',time=NOW()");
echo $count;
调用连接成功的PDO对象来执行一个查询,这个查询是一个插入一条记录的操作,使用PDO::exec() 方法会返回一个影响记录的结果。最后还是需要结束对象资源:
$db = null;
默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:array(PDO::ATTR_PERSISTENT => true) 变成这样:
$db = new PDO($dsn, 'root', '', array(PDO::ATTR_PERSISTENT => true));

如果想获取数据
[php]
$rs=$db->query("SELECT * FROM foo"); 
 foreach($rs->fetch() as $row){ 
    print_r($row); 

?> 
也可以用

[php]
$rs = $db->query("SELECT * FROM foo"); 
while($row = $rs->fetch()){ 
    print_r($row); 

?> 
一次获取所有数据

[php]
$rs = $db->query("SELECT * FROM foo"); 
$result_arr = $rs->fetchAll(); 
print_r($result_arr); 
?> 
结果显示:

[php]
Array 

    [0] => Array 
        ( 
            [id] => 1 
            [0] => 1 
            [name] => heiyeluren 
            [1] => heiyeluren 
            [gender] => 男 
            [2] => 男 
            [time] => 2006-10-28 23:14:23 
            [3] => 2006-10-28 23:14:23 
        ) 

我们看里面的记录,数字索引和关联索引都有,浪费资源,我们只需要关联索引的:

[php]
$db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER); 
$rs = $db->query("SELECT * FROM foo"); 
$rs->setFetchMode(PDO::FETCH_ASSOC); 
$result_arr = $rs->fetchAll(); 
print_r($result_arr); 
?> 
setAttribute() 方法是设置PDO属性,主要属性有:PDO::ATTR_CASE、PDO::ATTR_ERRMODE等等,我们这里需要设置的是PDO::ATTR_CASE,就是我们使用关联索引获取数据集的时候,关联索引是大写还是小写,有几个选择:
PDO::CASE_LOWER -- 强制列名是小写
PDO::CASE_NATURAL -- 列名按照原始的方式
PDO::CASE_UPPER -- 强制列名为大写

我们使用setFetchMode方法来设置获取结果集的返回值的类型,同样类型还有:
PDO::FETCH_ASSOC -- 关联数组形式
PDO::FETCH_NUM -- 数字索引数组形式
PDO::FETCH_BOTH -- 两者数组形式都有,这是缺省的
PDO::FETCH_OBJ -- 按照对象的形式,类似于以前的 mysql_fetch_object()

当然,一般情况下我们是使用PDO::FETCH_ASSOC,具体使用什么,按照你自己的需要,其他获取类型参考手册。

除了上面这种获取数据的方式,还可以:

[php]
$rs = $db->prepare("SELECT * FROM foo"); 
$rs->execute(); 
while($row = $rs->fetch()){ 
    print_r($row); 

?> 
如果你想获取指定记录里一个字段结果的话,可以使用 PDOStatement::fetchColumn():

[php]
$rs = $db->query("SELECT COUNT(*) FROM foo"); 
$col = $rs->fetchColumn(); 
echo $col; 
?> 
小结:

查询操作主要是PDO::query()、PDO::exec()、PDO::prepare()。PDO::query()主要是用于有记录结果返回的操作,特别是SELECT操作,PDO::exec()主要是针对没有结果集合返回的操作,比如INSERT、UPDATE、DELETE等操作,它返回的结果是当前操作影响的列数。PDO::prepare()主要是预处理操作,需要通过$rs->execute()来执行预处理里面的SQL语句,这个方法可以绑定参数,功能比较强大,不是本文能够简单说明白的,大家可以参考手册和其他文档。

获取结果集操作主要是:PDOStatement::fetchColumn()、PDOStatement::fetch()、PDOStatement::fetchALL()。PDOStatement::fetchColumn() 是获取结果指定第一条记录的某个字段,缺省是第一个字段。PDOStatement::fetch() 是用来获取一条记录,PDOStatement::fetchAll()是获取所有记录集到一个中,获取结果可以通过PDOStatement::setFetchMode来设置需要结果集合的类型。

另外有两个周边的操作,一个是PDO::lastInsertId()和PDOStatement::rowCount()。PDO::lastInsertId()是返回上次插入操作,主键列类型是自增的最后的自增ID。PDOStatement::rowCount()主要是用于PDO::query()和PDO::prepare()进行DELETE、INSERT、UPDATE操作影响的结果集,对PDO::exec()方法和SELECT操作无效。
【错误处理】
1. 面向对象的方式
先看看如果连接错误等的处理,使用面向对象的方式来处理:

[php]
try { 
   $db = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 
   $db = null; 
} catch (PDOException $e) { 
   print "Error: " . $e->getMessage() . "
"; 
   die(); 

?> 
这里利用我们PHP 5面向对象的异常处理特征,如果里面有异常的话就初始化调用PDOException来初始化一个异常类。
PDOException异常类的属性结构:

[php]
class PDOException extends Exception 

    public $errorInfo = null;  // 错误信息,可以调用 PDO::errorInfo() 或 PDOStatement::errorInfo()来访问 
    protected $message;    // 异常信息,可以试用 Exception::getMessage() 来访问 
    protected $code;             // SQL状态错误代码,可以使用 Exception::getCode() 来访问 

?> 
简单的看一下PHP 5内置的异常处理类结构:
[php]
class Exception 

    // 属性 
    protected $message = 'Unknown exception';   // 异常信息 
    protected $code = 0;                        // 用户自定义异常代码 
    protected $file;                            // 发生异常的文件名 
    protected $line;                            // 发生异常的代码行号 
 
    // 方法 
    final function getMessage();                // 返回异常信息 
    final function getCode();                   // 返回异常代码 
    final function getFile();                   // 返回发生异常的文件名 
    final function getLine();                   // 返回发生异常的代码行号 
    final function getTrace();                  // backtrace() 数组 
    final function getTraceAsString();          // 已格成化成字符串的 getTrace() 信息 

?> 
相应的,在代码中可以合适的调用 getFile() 和 getLine() 来进行错误定位,更方便的进行调试。

2. 面向过程的方法
[php]
 
$db = new PDO('mysql:host=localhost;dbname=test', $user, $pass); 
$rs = $db->query("SELECT aa,bb,cc FROM foo"); 
if ($db->errorCode() != '00000'){ 
    print_r($db->errorInfo()); 
    exit; 

$arr = $rs->fetchAll(); 
print_r($arr); 
$db = null; 
?> 
PDO和PDOStatement对象有errorCode() 和 errorInfo() 方法,如果没有任何错误, errorCode() 返回的是: 00000 ,否则就会返回一些错误代码。errorInfo() 返回的一个数组,包括PHP定义的错误代码和MySQL的错误代码和错误信息,数组结构如下:

[php]
Array 

    [0] => 42S22 
    [1] => 1054 
    [2] => Unknown column 'aaa' in 'field list' 

每次执行查询以后,errorCode() 的结果都是最新的,所以我们可以很容易自己控制错误信息显示。

摘自 河大李信的 Crazy Coding人生

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/478395.htmlTechArticle本文不涉及PDO的安装,只是简单总结一下PDO的使用。 开始构造第一个PDO应用,在Web文档目录下创建一个pdo.php文件: [php] ?php $dsn = mysql:hos...
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

CakePHP 프로젝트 구성 CakePHP 프로젝트 구성 Sep 10, 2024 pm 05:25 PM

이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 라우팅 CakePHP 라우팅 Sep 10, 2024 pm 05:25 PM

이번 장에서는 라우팅과 관련된 다음과 같은 주제를 학습하겠습니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

See all articles