在PHP开发中,mysql或者mysqli是现在大家使用较多的数据库连接方式。在PHP5中已经开始有PDO支持了,听说在下一个版本PHP6中,PDO将会作为默认的数据库链接工具,不管是真还是假,PDO作为数据库的另一种连接方式在不久的将来也许会很普遍的使用,这里清源就目前掌握的知识来看,将PDO的使用以实例的方式和大家分享一下,文章的部分代码来源于网络。
在使用PDO之前首先要设置PHP.INI文件,使PHP支持PDO,因为PHP5默认是不支持的。在PHP安装目录下找到PHP.INI文件,打开并搜索extension=php_pdo.dll 和 extension=php_pdo_mysql.dll,将前面的分号(;)去掉,重启apache即可。
接下来我们就开始写PHP代码了,首先是连接数据库,看下面的例子:
<?php define('DB_NAME', 'pdo_test'); define('DB_USER', 'root'); define('DB_PASSWORD', ''); define('DB_HOST', 'localhost'); define('DB_CHARSET', 'utf8'); try { $DBH = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASSWORD); $DBH->exec('SET CHARACTER SET '.DB_CHARSET); $DBH->exec('SET NAMES '.DB_CHARSET); } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } ?>
连接成功后,我们需要对数据库中的数据进行增删改查操作,这里主要用到exec和query两个函数。
示例:
<?php //增加数据 $sql_insert = 'Insert INTO wp_options(blog_id,option_name,option_value,autoload) VALUES (0,'.time().rand(1,100).','.time().rand(1,100).',\'no\')'; $back = $DBH->exec($sql_insert); //返回 bool 的true or fal $lastInsertId = $DBH->lastInsertId(); //删除数据 $sql_delete = 'Delete FROM wp_options Where option_id='.$lastInsertId; $back = $DBH->exec($sql_delete); //返回 bool 的true or fal $lastInsertId = $DBH->lastInsertId(); //更新数据 $sql_update = 'Update wp_options SET option_name = \''.time().rand(1,100).'\' Where option_id='.$lastInsertId; $lastUpdateId = $DBH->lastInsertId(); //返回的对应的操作的id //查询数据 $sql_select = 'Select option_id FROM wp_options orDER BY option_id DESC LIMIT 4 '; $back = $DBH->query($sql_select); //返回一个对象 这个对象可以用foreach 直接遍历循环 循环的为查询的结果集 $back = $DBH->query($sql_select)->fetch(); //返回一条数据结果 这个对象可以用foreach 直接遍历循环 循环的为查询的结果集 $back = $DBH->query($sql_select)->fetchAll(); //返回一个数组 这个对象可以用foreach 直接遍历循环 循环的为查询的结果集 $back = $DBH->query($sql_select)->fetchColumn(0); //返回一个字段字符串,这个字符串是返回的记录的第一条记录的第一个字段 ?>
到这里,PDO的基本操作基本上结束了。对于一般的企业网站,小型的管理系统基本上能满足了,但是,如果我们开发大型网站或者逻辑较复杂的管理系统,仅仅靠数据的读写是远远不够的,我们可能还需要对数据库的存储过程、事务等对象进行操作,下面我们继续看看用PDO是如何实现的。
对于事务,PDO已经封装好了,我们只需要调用就可以了。
示例:
<?php try{ $DBH->beginTransaction();//开启一个事务 //Sql 执行的内容 ...................... $DBH->exec($sql_insert); //执行一系列的操作 $DBH->exec($sql_update); $DBH->exec($sql_delete); //等等 $DBH->commit(); //如果正确执行完成 那么确认 commit } catch(Exception $e) { $DBH->rollBack();//如果执行中有错误的情况下 回滚 } ?>
这里重点说明一下,在使用事务时,一定要使用try..catch语句,当返回错误时事务不会提交。
PDO在执行存储过程时这里还是运用了比较老的方法,因为这一块清源也还没完全搞明白。如果大家有更好的办法可以拿出来共享一下。
看代码:
<?php $sql_procedure = ' Create PROCEDURE inout_test( IN in_option_id INT, OUT out_option_name VARCHAR(255), OUT out_option_value TEXT ) BEGIN Select option_name INTO out_option_name FROM wp_options Where option_id = in_option_id; Select option_value INTO out_option_value FROM wp_options Where option_id = in_option_id; END; '; try{ $sql_drop_procedure = 'Drop PROCEDURE inout_test'; $back = $DBH->exec($sql_procedure); $sql_call_procedure = 'CALL inout_test(100,@out_option_name,@out_option_value)'; $DBH->exec($sql_call_procedure); $sql_select_procedure = 'Select @out_option_name,@out_option_value'; $back = $DBH->query($sql_select_procedure)->fetch(); $back = $DBH->exec($sql_drop_procedure); }catch(Exception $e){ echo $e->getMessage(); } ?>
另外UncleToo再给大家介绍一点关于PDO预处理方面的知识。预处理机制有很多好处,他可以使sql语句重复使用,而且执行效率比直接执行来的更高,所以,如果我们把PDO的预处理机制用好了,对于程序来说是很不错的。(PS:T不错的PHP Q扣峮:276167802,验证:csl)
看下面这段实例代码:
<?php $stmt = $DBH->prepare('Insert INTO wp_options(blog_id,option_name,option_value,autoload) VALUES (0,:option_name,:option_value,\'no\')'); $option_name = $option_value = ''; $stmt->bindParam(':option_name', $option_name); // $stmt->bindParam(':option_value', $option_value); // 插入一条数据A $option_name = 'name'.time(); $option_value = 'value'.time(); $stmt->execute(); // 插入另一条不同的数据B $option_name = 'name_'.time(); $option_value = 'value_'.time(); $stmt->execute(); $stmt = $DBH->prepare('Insert INTO wp_options(blog_id,option_name,option_value,autoload) VALUES (0,?,?,\'no\')'); $option_name = $option_value = ''; $stmt->bindParam('1', $option_name); // $stmt->bindParam('2', $option_value); // 这里我们还可以插入A数据 $option_name = 'name'.time(); $option_value = 'value'.time(); $stmt->execute(); // 这里我们同样还可以插入B数据 $option_name = 'name_'.time(); $option_value = 'value_'.time(); $stmt->execute(); $stmt = $DBH->prepare("Select * FROM wp_options where option_id = ?"); if ($stmt->execute(array(@$_GET['option_id']))) { while (@$row = $stmt->fetch()) { print_r($row); } } ?>
上面介绍的这些都是PDO的基础,基本能满足我们在开发过程中的需要,对于其他功能,比如PDO大对象,错误处理,游标等功能大家可以参考PHP官方手册,这里就不做说明了(其实清源也不会^_^...)

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3汉化版
中文版,非常好用

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器