Go to comments

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



Leave a comment 0 Comments.

Leave a Reply

换一张