PHP PDO链接数据库
PDO(PHP Data Object)是PHP5新加入的一重大功能,
PHP5以前都是一对数据库扩展来跟各个数据链接和处理,比如php_mysql.dll、php_pgsql.dll、php_mysql.dll、php_sqlite.dll等等
从PHP的发展来看,PHP6默认使用PDO的方式来链接数据,在操作上会方便很多,这是大的方向和趋势。
二、PDO链接数据库
PDO可以理解是一个通用的数据链接的类,既然是类再PHP中new操作就可以
new PDO( "mysql:host=localhost; dbname=数据库名", "root", "pass", array( PDO::ATTR_PERSISTENT => true ) );
参数一
链接数据库的基本信息
mysql:host = localhost
mysql 数据库类型
host 数据库地址
参数二
dbname = dbname 数据库名
参数三
pass 用户密码
参数四
array(PDO::ATTR_PERSISTENT => true) 前面三个参数必填,第四个参数是可选的,如果需要数据库长连接(保持链接),需要长链接需要最后加一个参数
echo phpversion(),'<br/>'; // 5.6.15/7.4.20 $con = new PDO("mysql:host=localhost;dbname=db_orange", "root", ""); if($con){ var_dump($con); // object(PDO)#1 (0) { } }
创建数据库(db_orange),及数据表(regist)
create database db_orange charset utf8; create table regist( id int(8) unsigned primary key auto_increment NOT NULL, name varchar(120) not null default '' )engine=myisam default charset=utf8;
三、PDO常用方法及其使用
PDO::query() 主要是SELECT操作,主要用于有记录结果的返回操作
PDO::exec() INSERT、UPDATE等操作,主要是针对没有返回结果集合的操作(可以返回是否操作成功)
PDO::lastInsertId() 取得上次插入操作,主键列类型是自增的最后的自增ID
PDOStatement::fetch() 是用来获取一条记录
PDOStatement::fetchAll() 是获取所有记录集到一个集合
1、PDO::query()
PDO::query()和之前PHP中的query()的用法是一样的,主要用select语句的操作
$con = new PDO("mysql:host=localhost;dbname=db_orange", "root", ""); $result = $con->query("SELECT id, name FROM regist"); print_r($result); // PDOStatement Object ( [queryString] => SELECT id, name FROM regist ) /*** PDOStatement Object ( [queryString] => SELECT id, name FROM regist ) ***/
为什么说主要用与select呢?
因为query用于返回数据库查询的结果。
在之前在添加(insert)、更新(update)数据库的时候也使用query语句,但是在PDO的方式中还有一个exec()方法
exec()的好处是不用返回数据集,因为insert、update这些操作返回数据集是没有必要的,只要返回操作是否成功就可以了。
所以通过exec()去操作一些不需要返回结果的数据语句
2、PDO::exec()
没有返回数据集结果的操作,比如插入(insert)操作用exec()方法
$con = new PDO("mysql:host=localhost;dbname=db_orange", "root", ""); $con->exec('set names utf8'); // 没有这行,插入中文会出现乱码 if($con->exec("insert into regist(id, name)value('', '张三')")){ echo '插入成功<br/>'; }
3、PDO::lastInsertId()
lastInsertId()是数据操作中常用到一个方法,作用是取得上次插入的ID号。之前用的是mysql_insert_id()
$con = new PDO("mysql:host=localhost;dbname=db_orange", "root", ""); $con->exec('set names utf8'); if($con->exec("insert into regist(id, name)value('', '郑七')")){ echo '插入数据ID:', $con->lastInsertId(); }
4、PDOStatement::fetch()
fetch()同等于mysql_fetch_row() 或 mysql_fetch_array()
$con = new PDO("mysql:host=localhost;dbname=db_orange", "root", ""); $con->exec('set names utf8'); $result = $con->query("SELECT * FROM regist"); while($row = $result->fetch()){ print_r($row); } /** * 1. $con是通过PDO实例化的一个句柄 * 2. select语句本身是要返回数据结果集,所以通过query()的方式, * 通过query的方式执行sql语句:$con->query("SELECT * FROM regist") * 3. $result = $con->query("SELECT * FROM regist") 将内容付给变量$result * 4. 通过$result执行fetch()方法,$result->fetch()也相当获取一个句柄 * 通过句柄进行循环,循环到$row当中,然后打印出来 * */
5、PDOStatement::fetchAll()
查询一条或两条的时候,不需要写一个循环,之前mysql没有的这样的系统函数
fetchAll()方法是获取所有记录集到一个集合,下面获取前两条数据
$con = new PDO("mysql:host=localhost;dbname=db_orange", "root", ""); $con->exec('set names utf8'); $result = $con->query("SELECT * FROM regist limit 2"); $row = $result->fetchAll(); print_r($row); // Array ( [0] => Array ( [id] => 1 [0] => 1 [name] => 张三 [1] => 张三 ) [1] => Array ( [id] => 2 [0] => 2 [name] => 张三 [1] => 张三 ) ) /*** 返回一个二维数组: Array ( [0] => Array ( [id] => 1 [0] => 1 [name] => 张三 [1] => 张三 ) [1] => Array ( [id] => 2 [0] => 2 [name] => 张三 [1] => 张三 ) ) ***/
转PDO常用方法及其应用
PDO::query() 主要是用于有记录结果返回的操作,特别是SELECT操作
PDO::exec() 主要是针对没有结果集合返回的操作,如INSERT、UPDATE等操作
PDO::prepare() 主要是预处理操作,需要通过$rs->execute()来执行预处理里面的SQL语句,这个方法可以绑定参数,功能比较强大(防止sql注入就靠这个)
PDO::lastInsertId() 返回上次插入操作,主键列类型是自增的最后的自增ID
PDOStatement::fetch() 是用来获取一条记录
PDOStatement::fetchAll() 是获取所有记录集到一个集合
PDOStatement::fetchColumn() 是获取结果指定第一条记录的某个字段,缺省是第一个字段
PDOStatement::rowCount() :主要是用于PDO::query()和PDO::prepare()进行DELETE、INSERT、UPDATE操作影响的结果集,对PDO::exec()方法和SELECT操作无效
原文链接:https://blog.csdn.net/attilax/article/details/103512145
1627524027