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 安装
你可以通过 php 的 phpinfo() 函数来查看是否安装了pdo扩展。
1.在 unix /linux系统上安装 pdo
在unix上或linux上你需要添加以下扩展:
extension=pdo.so
2.在windows安装pdo
pdo 和所有主要的驱动作为共享扩展随 php 一起发布,要激活它们只需简单地编辑 php.ini 文件,并添加以下扩展:
extension=php_pdo.dll
除此之外还有以下对应的各种数据库扩展:
;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:
<?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 "连接成功<br/>"; /*你还可以进行一次搜索操作 foreach ($dbh->query('select * from foo') as $row) { print_r($row); //你可以用 echo($global); 来看到这些值 } */ $dbh = null; } catch (pdoexception $e) { die ("error!: " . $e->getmessage() . "<br/>"); } //默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数:array(pdo::attr_persistent => true) 变成这样: $db = new pdo($dsn, $user, $pass, array(pdo::attr_persistent => true)); ?>
再来看看pdo的详细介绍:
1.预定义常量:
pdo::param_bool (integer) | 表示布尔数据类型。 |
pdo::param_null (integer) | 表示 sql 中的 null 数据类型。 |
pdo::param_int (integer) | 表示 sql 中的整型。 |
pdo::param_str (integer) | 表示 sql 中的 char、varchar 或其他字符串类型。 |
pdo::param_lob (integer) | 表示 sql 中大对象数据类型。 |
pdo::param_stmt (integer) | 表示一个记录集类型。当前尚未被任何驱动支持。 |
pdo::param_input_output (integer) | 指定参数为一个存储过程的 inout 参数。必须用一个明确的 pdo::param_* 数据类型跟此值进行按位或。 |
pdo::fetch_lazy (integer) | 指定获取方式,将结果集中的每一行作为一个对象返回,此对象的变量名对应着列名。pdo::fetch_lazy 创建用来访问的对象变量名。在 pdostatement::fetchall() 中无效。 |
pdo::fetch_assoc (integer) | 指定获取方式,将对应结果集中的每一行作为一个由列名索引的数组返回。如果结果集中包含多个名称相同的列,则pdo::fetch_assoc每个列名只返回一个值。 |
pdo::fetch_named (integer) | 指定获取方式,将对应结果集中的每一行作为一个由列名索引的数组返回。如果结果集中包含多个名称相同的列,则pdo::fetch_assoc每个列名 返回一个包含值的数组。 |
pdo::fetch_num (integer) | 指定获取方式,将对应结果集中的每一行作为一个由列号索引的数组返回,从第 0 列开始。 |
pdo::fetch_both (integer) | 指定获取方式,将对应结果集中的每一行作为一个由列号和列名索引的数组返回,从第 0 列开始。 |
pdo::fetch_obj (integer) | 指定获取方式,将结果集中的每一行作为一个属性名对应列名的对象返回。 |
pdo::fetch_bound (integer) | 指定获取方式,返回 true 且将结果集中的列值分配给通过 pdostatement::bindparam() 或 pdostatement::bindcolumn() 方法绑定的 php 变量。 |
pdo::fetch_column (integer) | 指定获取方式,从结果集中的下一行返回所需要的那一列。 |
pdo::fetch_class (integer) | 指定获取方式,返回一个所请求类的新实例,映射列到类中对应的属性名。 注意: 如果所请求的类中不存在该属性,则调用 __set() 魔术方法 |
pdo::fetch_into (integer) | 指定获取方式,更新一个请求类的现有实例,映射列到类中对应的属性名。 |
pdo::fetch_func (integer) | 允许在运行中完全用自定义的方式处理数据。(仅在 pdostatement::fetchall() 中有效)。 |
pdo::fetch_group (integer) | 根据值分组返回。通常和 pdo::fetch_column 或 pdo::fetch_key_pair 一起使用。 |
pdo::fetch_unique (integer) | 只取唯一值。 |
pdo::fetch_key_pair (integer) | 获取一个有两列的结果集到一个数组,其中第一列为键名,第二列为值。自 php 5.2.3 起可用。 |
pdo::fetch_classtype (integer) | 根据第一列的值确定类名。 |
pdo::fetch_serialize (integer) | 类似 pdo::fetch_into ,但是以一个序列化的字符串表示对象。自 php 5.1.0 起可用。从 php 5.3.0 开始,如果设置此标志,则类的构造函数从不会被调用。 |
pdo::fetch_props_late (integer) | 设置属性前调用构造函数。自 php 5.2.0 起可用。 |
pdo::attr_autocommit (integer) | 如果此值为 false ,pdo 将试图禁用自动提交以便数据库连接开始一个事务。 |
pdo::attr_prefetch (integer) | 设置预取大小来为你的应用平衡速度和内存使用。并非所有的数据库/驱动组合都支持设置预取大小。较大的预取大小导致性能提高的同时也会占用更多的内存。 |
pdo::attr_timeout (integer) | 设置连接数据库的超时秒数。 |
pdo::attr_errmode (integer) | 关于此属性的更多信息请参见 错误及错误处理 部分。 |
pdo::attr_server_version (integer) | 此为只读属性;返回 pdo 所连接的数据库服务的版本信息。 |
pdo::attr_client_version (integer) | 此为只读属性;返回 pdo 驱动所用客户端库的版本信息。 |
pdo::attr_server_info (integer) | 此为只读属性。返回一些关于 pdo 所连接的数据库服务的元信息。 |
pdo::attr_connection_status (integer) | |
pdo::attr_case (integer) | 用类似 pdo::case_* 的常量强制列名为指定的大小写。 |
pdo::attr_cursor_name (integer) | 获取或设置使用游标的名称。当使用可滚动游标和定位更新时候非常有用。 |
pdo::attr_cursor (integer) | 选择游标类型。 pdo 当前支持 pdo::cursor_fwdonly 和 pdo::cursor_scroll。一般为 pdo::cursor_fwdonly,除非确实需要一个可滚动游标。 |
pdo::attr_driver_name (string) | 返回驱动名称。
使用 pdo::attr_driver_name 的例子: <?php if ($db->getattribute(pdo::attr_driver_name) == 'mysql') { echo "running on mysql; doing something mysql specific here\n"; } ?> |
pdo::attr_oracle_nulls (integer) | 在获取数据时将空字符串转换成 sql 中的 null 。 |
pdo::attr_persistent (integer) | 请求一个持久连接,而非创建一个新连接。关于此属性的更多信息请参见 连接与连接管理 。 |
pdo::attr_statement_class (integer) | |
pdo::attr_fetch_catalog_names (integer) | 将包含的目录名添加到结果集中的每个列名前面。目录名和列名由一个小数点分开(.)。此属性在驱动层面支持,所以有些驱动可能不支持此属性。 |
pdo::attr_fetch_table_names (integer) | 将包含的表名添加到结果集中的每个列名前面。表名和列名由一个小数点分开(.)。此属性在驱动层面支持,所以有些驱动可能不支持此属性。 |
pdo::attr_stringify_fetches (integer) | |
pdo::attr_max_column_len (integer) | |
pdo::attr_default_fetch_mode (integer) | 自 php 5.2.0 起可用。 |
pdo::attr_emulate_prepares (integer) | 自 php 5.1.3 起可用。 |
pdo::errmode_silent (integer) | 如果发生错误,则不显示错误或异常。希望开发人员显式地检查错误。此为默认模式。关于此属性的更多信息请参见 错误与错误处理 。 |
pdo::errmode_warning (integer) | 如果发生错误,则显示一个 php e_warning 消息。关于此属性的更多信息请参见 错误与错误处理。 |
pdo::errmode_exception (integer) | 如果发生错误,则抛出一个 pdoexception 异常。关于此属性的更多信息请参见 错误与错误处理。 |
pdo::case_natural (integer) | 保留数据库驱动返回的列名。 |
pdo::case_lower (integer) | 强制列名小写。 |
pdo::case_upper (integer) | 强制列名大写。 |
pdo::null_natural (integer) | |
pdo::null_empty_string (integer) | |
pdo::null_to_string (integer) | |
pdo::fetch_ori_next (integer) | 在结果集中获取下一行。仅对可滚动游标有效。 |
pdo::fetch_ori_prior (integer) | 在结果集中获取上一行。仅对可滚动游标有效。 |
pdo::fetch_ori_first (integer) | 在结果集中获取第一行。仅对可滚动游标有效。 |
pdo::fetch_ori_last (integer) | 在结果集中获取最后一行。仅对可滚动游标有效。 |
pdo::fetch_ori_abs (integer) | 根据行号从结果集中获取需要的行。仅对可滚动游标有效。 |
pdo::fetch_ori_rel (integer) | 根据当前游标位置的相对位置从结果集中获取需要的行。仅对可滚动游标有效。 |
pdo::cursor_fwdonly (integer) | 创建一个只进游标的 pdostatement 对象。此为默认的游标选项,因为此游标最快且是 php 中最常用的数据访问模式。 |
pdo::cursor_scroll (integer) | 创建一个可滚动游标的 pdostatement 对象。通过 pdo::fetch_ori_* 常量来控制结果集中获取的行。 |
pdo::err_none (string) | 对应 sqlstate '00000',表示 sql 语句没有错误或警告地成功发出。当用 pdo::errorcode() 或 pdostatement::errorcode() 来确定是否有错误发生时,此常量非常方便。在检查上述方法返回的错误状态代码时,会经常用到。 |
pdo::param_evt_alloc (integer) | 分配事件 |
pdo::param_evt_free (integer) | 解除分配事件 |
pdo::param_evt_exec_pre (integer) | 执行一条预处理语句之前触发事件。 |
pdo::param_evt_exec_post (integer) | 执行一条预处理语句之后触发事件。 |
pdo::param_evt_fetch_pre (integer) | 从一个结果集中取出一条结果之前触发事件。 |
pdo::param_evt_fetch_post (integer) | 从一个结果集中取出一条结果之后触发事件。 |
pdo::param_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 — 为语句设置默认的获取模式。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Ubuntu18.04 安装docker