php pdo操作数据库示例

POD扩展是在PHP5中加入,该扩展提供PHP内置类 PDO来对数据库进行访问,不同数据库使用相同的方法名,解决数据库连接不统一的问题。

PDO的特点:

性能。PDO 从一开始就吸取了现有数据库扩展成功和失败的经验教训。因为 PDO 的代码是全新的,所以我们有机会重新开始设计性能,以利用 PHP 5 的最新特性。

能力。PDO 旨在将常见的数据库功能作为基础提供,同时提供对于 RDBMS 独特功能的方便访问。

简单。PDO 旨在使您能够轻松使用数据库。API 不会强行介入您的代码,同时会清楚地表明每个函数调用的过程。

运行时可扩展。PDO 扩展是模块化的,使您能够在运行时为您的数据库后端加载驱动程序,而不必重新编译或重新安装整个 PHP 程序。例如,PDO_OCI 扩展会替代 PDO 扩展实现 oracle 数据库 API。还有一些用于 MysqL、Postgresql、ODBC 和 Firebird 的驱动程序,更多的驱动程序尚在开发。

PDO 安装

你可以通过 PHPPHPinfo() 函数来查看是否安装了PDO扩展。

1.在 Unix /Linux系统上安装 PDO

在Unix上或Linux上你需要添加以下扩展:

rush:js;"> extension=pdo.so

2.在Windows安装pdo

PDO 和所有主要的驱动作为共享扩展随 PHP 一起发布,要激活它们只需简单地编辑 PHP.ini 文件,并添加以下扩展:

rush:PHP;"> extension=PHP_pdo.dll

除此之外还有以下对应的各种数据库扩展:

rush:plain;"> ;extension=PHP_pdo_firebird.dll ;extension=PHP_pdo_informix.dll ;extension=PHP_pdo_mssql.dll ;extension=PHP_pdo_MysqL.dll ;extension=PHP_pdo_oci.dll ;extension=PHP_pdo_oci8.dll ;extension=PHP_pdo_odbc.dll ;extension=PHP_pdo_pgsql.dll ;extension=PHP_pdo_sqlite.dll

打开PHP.ini把上面所有行前面的分号去掉就可以了。

在设定好这些配置后,我们需要重启PHP 或 Web服务器。

下面我们以MysqL为例来使用pdo:

rush:PHP;"> PHP $dbms='MysqL'; //数据库类型 $host='localhost'; //数据库主机名 $dbname='test'; //使用的数据库 $user='root'; //数据库连接用户名 $pass=''; //对应的密码 $dsn="$dbms:host=$host;dbname=$dbname";

try {
$dbh = new PDO($dsn,$user,$pass); //初始化一个PDO对象
echo "连接成功
";
/你还可以进行一次搜索操作
foreach ($dbh->query('SELECT
from FOO') as $row) {
print_r($row); //你可以用 echo($GLOBAL); 来看到这些值
}
*/
$dbh = null;
} catch (PDOException $e) {
die ("Error!: " . $e->getMessage() . "
");
}
//认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:array(PDO::ATTR_PERSISTENT => true) 变成这样:
$db = new PDO($dsn,$pass,array(PDO::ATTR_PERSISTENT => true));

?>

再来看看pdo的详细介绍:

1.预定义常量

araM_BOOL (integer)araM_NULL (integer)sql 中的 NULL 数据类型。araM_INT (integer)sql 中的整型。araM_STR (integer)sql 中的 CHAR、VARCHAR 或其他字符串类型。araM_LOB (integer)sql 中大对象数据类型。araM_STMT (integer)一个记录集类型。当前尚未被任何驱动支持。araM_INPUT_OUTPUT (integer)一个存储过程的 INOUT 参数。必须用一个明确的 PDO::ParaM_* 数据类型跟此值进行按位或。获取方式,将结果集中的每一行作为一个对象返回,此对象的变量名对应着列名。PDO::FETCH_LAZY 创建用来访问的对象变量名。在 PDOStatement::fetchAll() 中无效。获取方式,将对应结果集中的每一行作为一个由列名索引的数组返回。如果结果集中包含多个名称相同的列,则PDO::FETCH_ASSOC每个列名只返回一个值。获取方式,将对应结果集中的每一行作为一个由列名索引的数组返回。如果结果集中包含多个名称相同的列,则PDO::FETCH_ASSOC每个列名 返回一个包含值的数组。获取方式,将对应结果集中的每一行作为一个由列号索引的数组返回,从第 0 列开始。获取方式,将对应结果集中的每一行作为一个由列号和列名索引的数组返回,从第 0 列开始。获取方式,将结果集中的每一行作为一个属性名对应列名的对象返回。获取方式,返回 TRUE 且将结果集中的列值分配给通过 PDOStatement::bindparam() 或 PDOStatement::bindColumn() 方法绑定的 PHP 变量。获取方式,从结果集中的下一行返回所需要的那一列。获取方式,返回一个所请求类的新实例,映射列到类中对应的属性名。

注意: 如果所请求的类中不存在该属性,则调用 __set() 魔术方法

获取方式,更新一个请求类的现有实例,映射列到类中对应的属性名。自定义的方式处理数据。(仅在 PDOStatement::fetchAll() 中有效)。获取一个有两列的结果集到一个数组,其中第一列为键名,第二列为值。自 PHP 5.2.3 起可用。sstYPE (integer)一个序列化的字符串表示对象。自 PHP 5.1.0 起可用。从 PHP 5.3.0 开始,如果设置此标志,则类的构造函数从不会被调用。属性前调用构造函数。自 PHP 5.2.0 起可用。自动提交以便数据库连接开始一个事务。数据库/驱动组合都支持设置预取大小。较大的预取大小导致性能提高的同时也会占用更多的内存。数据库的超时秒数。属性的更多信息请参见 错误错误处理 部分。属性;返回 PDO 所连接的数据库服务的版本信息。属性;返回 PDO 驱动所用客户端库的版本信息。属性。返回一些关于 PDO 所连接的数据库服务的元信息。获取或设置使用游标的名称。当使用可滚动游标和定位更新时候非常有用。支持 PDO::CURSOR_FWDONLY 和 PDO::CURSOR_SCROLL。一般为 PDO::CURSOR_FWDONLY,除非确实需要一个可滚动游标。名称。

使用 PDO::ATTR_DRIVER_NAME 的例子:

getAttribute(PDO::ATTR_DRIVER_NAME) == 'MysqL') { echo "Running on MysqL; doing something MysqL specific here\n"; } ?>获取数据时将空字符串转换sql 中的 NULL 。一个持久连接,而非创建一个新连接。关于此属性的更多信息请参见 连接与连接管理 。添加到结果集中的每个列名前面。目录名和列名由一个小数点分开(.)。此属性在驱动层面支持,所以有些驱动可能不支持属性。添加到结果集中的每个列名前面。表名和列名由一个小数点分开(.)。此属性在驱动层面支持,所以有些驱动可能不支持属性。PHP 5.2.0 起可用。PHP 5.1.3 起可用。错误,则不显示错误或异常。希望开发人员显式地检查错误。此为认模式。关于此属性的更多信息请参见 错误错误处理 。错误,则显示一个 PHP E_WARNING 消息。关于此属性的更多信息请参见 错误错误处理。错误,则抛出一个 PDOException 异常。关于此属性的更多信息请参见 错误错误处理。数据库驱动返回的列名。获取下一行。仅对可滚动游标有效。获取上一行。仅对可滚动游标有效。irsT (integer)获取第一行。仅对可滚动游标有效。获取最后一行。仅对可滚动游标有效。获取需要的行。仅对可滚动游标有效。获取需要的行。仅对可滚动游标有效。一个只进游标的 PDOStatement 对象。此为认的游标选项,因为此游标最快且是 PHP 中最常用的数据访问模式。一个可滚动游标的 PDOStatement 对象。通过 PDO::FETCH_ORI_* 常量来控制结果集中获取的行。sqlSTATE '00000',表示 sql 语句没有错误或警告地成功发出。当用 PDO::errorCode() 或 PDOStatement::errorCode() 来确定是否有错误发生时,此常量非常方便。在检查上述方法返回的错误状态代码时,会经常用到。araM_EVT_ALLOC (integer)araM_EVT_FREE (integer)araM_EVT_EXEC_PRE (integer)araM_EVT_EXEC_POST (integer)araM_EVT_FETCH_PRE (integer)一个结果集中取出一条结果之前触发事件。araM_EVT_FETCH_POST (integer)一个结果集中取出一条结果之后触发事件。araM_EVT_norMALIZE (integer)注册允许驱动程序正常化变量名时触发事件。

2.PDO 类:

  • PDO::beginTransaction — 启动一个事务
  • PDO::commit — 提交一个事务
  • PDO::__construct — 创建一个表示数据库连接的 PDO 实例
  • PDO::errorCode — 获取数据库句柄上一次操作相关的 sqlSTATE
  • PDO::errorInfo — 返回最后一次操作数据库错误信息
  • PDO::exec — 执行一条 sql 语句,并返回受影响的行数
  • PDO::getAttribute — 取回一个数据库连接的属性
  • PDO::getAvailableDrivers — 返回一个可用驱动的数组
  • PDO::inTransaction — 检查是否在一个事务内
  • PDO::lastInsertId — 返回最后插入行的ID或序列值
  • PDO::prepare — 备要执行的sql语句并返回一个 PDOStatement 对象
  • PDO::query — 执行 sql 语句,返回PDOStatement对象,可以理解为结果集
  • PDO::quote — 为sql语句中的字符串添加引号。
  • PDO::rollBack — 回滚一个事务
  • PDO::setAttribute — 设置属性
    • PDOStatement 类:
    • PDOStatement::bindColumn — 绑定一列到一个 PHP 变量
    • PDOStatement::bindParam — 绑定一个参数到指定的变量名
    • PDOStatement::bindValue — 把一个值绑定到一个参数
    • PDOStatement::closeCursor — 关闭游标,使语句能再次被执行。
    • PDOStatement::columnCount — 返回结果集中的列数
    • PDOStatement::debugDumpParams — 打印一条 sql 预处理命令
    • PDOStatement::errorCode — 获取跟上一次语句句柄操作相关的 sqlSTATE
    • PDOStatement::errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息
    • PDOStatement::execute — 执行一条预处理语句
    • PDOStatement::fetch — 从结果集中获取下一行
    • PDOStatement::fetchAll — 返回一个包含结果集中所有行的数组
    • PDOStatement::fetchColumn — 从结果集中的下一行返回单独的一列。
    • PDOStatement::fetchObject — 获取下一行并作为一个对象返回。
    • PDOStatement::getAttribute — 检索一个语句属性
    • PDOStatement::getColumnMeta — 返回结果集中一列的元数据
    • PDOStatement::nextRowset — 在一个多行集语句句柄中推进到下一个行集
    • PDOStatement::rowCount — 返回受上一个 sql 语句影响的行数
    • PDOStatement::setAttribute — 设置一个语句属性
    • PDOStatement::setFetchMode — 为语句设置认的获取模式。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


服务器优化必备:深入了解PHP8底层开发原理
Golang的网络编程:如何快速构建高性能的网络应用?
Golang和其他编程语言的对比:为什么它的开发效率更高?
PHP8底层开发原理揭秘:如何利用新特性创建出色的Web应用
将字符重新排列以形成回文(如果可能)在C++中
掌握PHP8底层开发原理和新特性:创建高效可扩展的应用程序
服务器性能优化必学:掌握PHP8底层开发原理
PHP8新特性和底层开发原理详解:优化应用性能的终极指南
将 C/C++ 代码转换为汇编语言
深入研究PHP8底层开发原理:创建高效可扩展的应用程序
C++程序查找法向量和迹
PHP8底层开发原理实战指南:提升服务器效能
重排数组,使得当 i 为偶数时,arr[i] >= arr[j],当 i 为奇数时,arr[i] <= arr[j],其中 j < i,使用 C++ 语言实现
Golang的垃圾回收:为什么它可以减少开发人员的负担?
C++程序:将一个数组的所有元素复制到另一个数组中
Golang:构建智能系统的基石
为什么AI开发者应该关注Golang?
在C和C++中,逗号(comma)的用法是用来分隔表达式或语句
PHP8底层开发原理解析及新特性应用实例
利用PHP8底层开发原理解析新特性:如何构建出色的Web应用