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
