Rumah php教程 php手册 PHP 中使用 PDO

PHP 中使用 PDO

Jun 13, 2016 am 10:46 AM
mssql mysql pdo php kesan guna abstrak pangkalan data ya pengenalan bersatu akses

PDO简介
PDO 是一个“数据库访问抽象层”,作用是统一各种数据库(MySQL、MSSQL、Oracle、DB2、PostgreSQL……)的访问接口,能轻松的在不同的数据库之间完成切换,使得数据库间的移植容易实现。

PDO 驱动


 
支持PDO 的驱动及相应的数据库列表
驱动名 对应访问的数据库
 PDO_DBLIB  FreeTDS / Microsoft SQL Server / Sybase
 PDO_FIREBIRD  Firebird / Interbase 6
 PDO_MYSQL  MySQL
 PDO_OCI  Oracle
 PDO_ODBC  ODBC v3
 PDO_PGSQL  PostgreSQL
 PDO_SQLITE  SQLite
 

PDO安装
PDO 是 PHP 5.1 发行的,也就是说,在 5.1 之前的版本是不支持 PDO 的,PDO 也是未来 PHP 处理数据库的首选和趋势。

下面介绍 PDO 的安装:

1、Linux 环境

        在 Linux 环境中下为启用对 MySQL 的 PDO 程序驱动支持,需要在安装 PHP (5.1以上版本)的源代码包时,向 configure 命令中添加:

--with-pdo-mysql=/usr/local/mysql   // "/usr/local/mysql"为 MySQL 服务器的安装目录 
--with-pdo-mysql=/usr/local/mysql   // "/usr/local/mysql"为 MySQL 服务器的安装目录
2、Windows 环境

        修改 php.ini 文件,找到如下,把前面的“;”(分号:代表注释)去掉即可!

;extension=php_pdo.dll            // 所有 PDO 驱动共享的扩展,这个必须有 
;extension=php_pdo_mysql.dll  // 使用 MySQL 使用这行 
;extension=php_pdo_mssql.dll  // 使用 MSSQL 使用这行 
;extension=php_pdo.dll            // 所有 PDO 驱动共享的扩展,这个必须有
;extension=php_pdo_mysql.dll  // 使用 MySQL 使用这行
;extension=php_pdo_mssql.dll  // 使用 MSSQL 使用这行
        保存 php.ini 文件,重启 Apache 服务器,查看 phpinfo() 函数,出现下图说明安装成功。

 

 

 注意:Windows 环境中,有时可能配置不成功,出现不了上图的现象。这时,把 PHP 安装扩展中的 php_pdo_mysql.dll、php_pdo.dll……等文件拷贝到系统安装路径的 Windows 下。

 


创建 PDO 对象
PDO 的构造方法原型如下:

__construct(string dsn [,string db_user [,string db_pwd [,array driver_options]]]) 
__construct(string dsn [,string db_user [,string db_pwd [,array driver_options]]])参数说明:
1、dsn(data source name):数据源名称,定义用到的数据库和驱动;

        a、连接 MySQL 数据库的DSN:mysql:host=localhost;dbname=test  // 主机名为:localhost;数据库名称为:test


        b、连接 Oracle 数据库的DSN:oci:dbname=//localhost:1521/test    // 主机名为:localhost;端口:1521;数据库名称为:test

        ……更多的 DSN 请参考 PHP 手册


2、db_user:数据库用户名;

3、db_pwd:数据库密码;

4、driver_options:是一个数组,用来指定连接所需的所有额外选项

PDO 用来指定连接所需的所有额外选项 

选项名
 PDO::ATTR_AUTOCOMMIT  确定PDO 是否关闭自动提交功能,设置FALSE 为关闭
 PDO::ATTR_CASE  强制PDO 获取的表字段字符的大小写转换,或原样使用列信息
 PDO::ATTR_ERRMODE  设置错误处理的模式
 PDO::ATTR_PERSISTENT  确定连接是否为持久连接,默认为FALSE,不持久连接
 PDO::ATTR_ORACLE_NULLS  将返回的空字符串转换为SQL 的NULL
 PDO::ATTR_PREFETCH  设置应用程序提前获取的数据大小,以K 字节为单位
 PDO::ATTR_TIMEOUT  设置超时之前的等待时间(秒为单位)
 PDO::ATTR_SERVER_INFO  包含与数据库特有的服务器信息
 PDO::ATTR_SERVER_VERSION  包含与数据库服务器版本号有关的信息
 PDO::ATTR_CLIENT_VERSION  包含与数据库客户端版本号有关的信息
 PDO::ATTR_CONNECTION_STATUS  设置超时之前的等待时间(秒为单位)
 

调用 PDO 构造方法(连接数据库)
    try { 
        $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '1715544', array(PDO::ATTR_PERSISTENT=>true)); 
    } catch (PDOException $e) { 
        exit('数据库连接失败,错误信息:'. $e->getMessage()); 
    } 
?> 
 try {
  $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '1715544', array(PDO::ATTR_PERSISTENT=>true));
 } catch (PDOException $e) {
  exit('数据库连接失败,错误信息:'. $e->getMessage());
 }
?>


PDO 对象的成员方法
PDO对象中的成员方法

 

方法名
 getAttribute()  获取一个“数据库连接对象”的属性
 setAttribute()  为一个“数据库连接对象”设定属性
 errorCode()  获取错误码
 errorInfo()  获取错误信息
 exec()   处理一条SQL 语句,并返回所影响的行数
 query()  处理一条SQL 语句,并返回一个"PDOStatement" 对象
 quote()  为某个SQL 中的字符串添加引号
 lastInsertId()  获取插入到表中的最后一条数据的主键值
 prepare()  负责准备执行的SQL 语句
 getAvailableDrivers()  获取有效的PDO 驱动器名称
 beginTransaction()  开始一个事务,标明回滚起始点
 commit()  提交一个事务,并执行SQL
 rollback()  回滚一个事务
 

使用 PDO 执行 SQL 语句

1、使用 PDO::exec() 方法

PDO::exec() 方法多用在 SQL 中的 INSERT、UPDATE、DELETE,返回的为受影响的行数


    date_default_timezone_set('PRC'); 
    header('Content-Type:text/html;Charset=utf-8'); 
    try { 
        $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '1715544'); 
        $pdo->setAttribute(PDO::ATTR_PERSISTENT, true);  // 设置数据库连接为持久连接  
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  // 设置抛出错误  
        $pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true);  // 设置当字符串为空转换为 SQL 的 NULL  
        $pdo->query('SET NAMES utf8');  // 设置数据库编码  
    } catch (PDOException $e) { 
        exit('数据库连接错误,错误信息:'. $e->getMessage()); 
    } 
    $addTime = date('Y-m-d H:i:s', time()); 
    $sql = "INSERT INTO think_user(userName,email,age,addTime) VALUES ('酒井法子','jiujinfazi@sina.com.cn','28','{$addTime}')"; 
    $row = $pdo->exec($sql); 
    if ($row) { 
        echo '添加成功'; 
    } else { 
        echo '添加失败'; 
    } 
?> 
 date_default_timezone_set('PRC');
 header('Content-Type:text/html;Charset=utf-8');
 try {
  $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '1715544');
  $pdo->setAttribute(PDO::ATTR_PERSISTENT, true); // 设置数据库连接为持久连接
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  // 设置抛出错误
  $pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true);  // 设置当字符串为空转换为 SQL 的 NULL
  $pdo->query('SET NAMES utf8');  // 设置数据库编码
 } catch (PDOException $e) {
  exit('数据库连接错误,错误信息:'. $e->getMessage());
 }
 $addTime = date('Y-m-d H:i:s', time());
 $sql = "INSERT INTO think_user(userName,email,age,addTime) VALUES ('酒井法子','jiujinfazi@sina.com.cn','28','{$addTime}')";
 $row = $pdo->exec($sql);
 if ($row) {
  echo '添加成功';
 } else {
  echo '添加失败';
 }
?>
2、使用 PDO::query() 方法


PDO::query() 方法用在 SQL 中的 SELECT 查询上。如果该方法执行成功,那么将返回一个 PDOStatement 对象,使用 rowCount() 方法可以返回影响的行数

    header('Content-Type:text/html;Charset=utf-8'); 
    try { 
        $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '1715544'); 
        $pdo->setAttribute(PDO::ATTR_PERSISTENT, true);  // 设置数据库连接为持久连接  
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  // 设置抛出错误  
        $pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true);  // 设置当字符串为空转换为 SQL 的 NULL  
        $pdo->query('SET NAMES utf8');  // 设置数据库编码  
    } catch (PDOException $e) { 
        exit('数据库连接错误,错误信息:'. $e->getMessage()); 
    } 
    $sql = "SELECT userName,email,age,addTime FROM think_user"; 
    try { 
        $result = $pdo->query($sql); 
        foreach ($result as $row) { 
            echo $row['userName'] . "\t" . $row['email'] . "\t" .$row['age']  . "\t" .$row['addTime'] . '
'; 
        } 
        echo '总共'. $result->rowCount() .'条'; 
    } catch (PDOException $e) { 
        exit($e->getMessage()); 
    } 
?> 
 header('Content-Type:text/html;Charset=utf-8');
 try {
  $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '1715544');
  $pdo->setAttribute(PDO::ATTR_PERSISTENT, true); // 设置数据库连接为持久连接
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  // 设置抛出错误
  $pdo->setAttribute(PDO::ATTR_ORACLE_NULLS, true);  // 设置当字符串为空转换为 SQL 的 NULL
  $pdo->query('SET NAMES utf8');  // 设置数据库编码
 } catch (PDOException $e) {
  exit('数据库连接错误,错误信息:'. $e->getMessage());
 }
 $sql = "SELECT userName,email,age,addTime FROM think_user";
 try {
  $result = $pdo->query($sql);
  foreach ($result as $row) {
   echo $row['userName'] . "\t" . $row['email'] . "\t" .$row['age']  . "\t" .$row['addTime'] . '
';
  }
  echo '总共'. $result->rowCount() .'条';
 } catch (PDOException $e) {
  exit($e->getMessage());
 }
?>


PDO 对预处理语句的支持

摘自 Lee.的专栏
 

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Bagaimana untuk membetulkan ralat mysql_native_password tidak dimuatkan pada MySQL 8.4 Bagaimana untuk membetulkan ralat mysql_native_password tidak dimuatkan pada MySQL 8.4 Dec 09, 2024 am 11:42 AM

Salah satu perubahan utama yang diperkenalkan dalam MySQL 8.4 (keluaran LTS terkini pada 2024) ialah pemalam "Kata Laluan Asli MySQL" tidak lagi didayakan secara lalai. Selanjutnya, MySQL 9.0 mengalih keluar pemalam ini sepenuhnya. Perubahan ini mempengaruhi PHP dan apl lain

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Bagaimana anda menghuraikan dan memproses HTML/XML dalam PHP? Feb 07, 2025 am 11:57 AM

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

Program PHP untuk mengira vokal dalam rentetan Program PHP untuk mengira vokal dalam rentetan Feb 07, 2025 pm 12:12 PM

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Apa itu DeepSeek? Apa itu DeepSeek? Feb 19, 2025 pm 03:57 PM

DeepSeek: Seorang Pembantu Pintar AI Anda Tidak Boleh Miss! DeepSeek adalah alat AI yang popular di kalangan pengguna. Ia menyediakan fungsi komunikasi interaktif pintar yang kuat, dan yang berikut adalah pengenalan terperinci kepada fungsi yang kuat: Fungsi Teras DeepSeek: Master Pemprosesan Teks: Mudah membuat penulisan copywriting, menterjemahkan dan menggilapnya, dan meningkatkan keupayaan ekspresi teks anda. Alat pengaturcaraan: Menghasilkan dan lengkap kod lengkap, dengan cepat memahami logik kod, dan mengesan dengan berkesan dan membetulkan kesilapan kod, meningkatkan kecekapan pengaturcaraan. Pakar Interaksi Pintar: Perkhidmatan pelanggan pintar terbina dalam dan fungsi kokpit pintar untuk memberikan pengalaman interaktif yang mudah. Pakar Peramalan Analisis Data: Penyokong

7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini 7 Fungsi PHP Saya Menyesal Saya Tidak Tahu Sebelum ini Nov 13, 2024 am 09:42 AM

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

10 Platform CMS PHP Terbaik Untuk Pembangun pada 2024 10 Platform CMS PHP Terbaik Untuk Pembangun pada 2024 Dec 05, 2024 am 10:29 AM

CMS bermaksud Sistem Pengurusan Kandungan. Ia adalah aplikasi perisian atau platform yang membolehkan pengguna mencipta, mengurus dan mengubah suai kandungan digital tanpa memerlukan pengetahuan teknikal lanjutan. CMS membolehkan pengguna membuat dan menyusun kandungan seperti teks, imej, video dan dokumen dengan mudah serta menerbitkannya di tapak web atau platform digital lain.

See all articles