0

0

php中PDO方式实现数据库的增删改查

php中文网

php中文网

发布时间:2016-06-13 09:04:28

|

958人浏览过

|

来源于php中文网

原创

php中pdo方式实现数据库的增删改查

   pdo是mysql数据库操作的一个公用类了,我们不需要进行自定类就可以直接使用pdo来操作数据库了,但是在php默认配置中pdo是未开启所以我们必须先在php.ini中开启它才可以使用。

  需要开启php的pdo支持,php5.1以上版本支持

  实现数据库连接单例化,有三要素 静态变量、静态实例化方法、私有构造函数 DPDO.php

  ?

1

立即学习PHP免费学习笔记(深入)”;

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

51shop 网上商城系统
51shop 网上商城系统

51shop 由 PHP 语言开发, 使用快速的 MySQL 数据库保存数据 ,为中小型网站实现网上电子商务提供一个完美的解决方案.一、用户模块1. 用户注册:用户信息包括:用户ID、用户名、用户密码、性别、邮箱、省份、城市、 联系电话等信息,用户注册后不能立即使用,需由管理员激活账号,才可使用(此功能管理员可设置)2. 登录功能3. 资料修改:用户可修改除账号以后的所有资料4. 忘记密码:要求用

下载

34

35

36

37

38

39

class DPDO{

private $DSN;

private $DBUser;

private $DBPwd;

private $longLink;

private $pdo;

//私有构造函数 防止被直接实例化

private function __construct($dsn, $DBUser, $DBPwd, $longLink = false) {

$this->DSN = $dsn;

$this->DBUser = $DBUser;

$this->DBPwd = $DBPwd;

$this->longLink = $longLink;

$this->connect();

}

//私有 空克隆函数 防止被克隆

private function __clone(){}

//静态 实例化函数 返回一个pdo对象

static public function instance($dsn, $DBUser, $DBPwd, $longLink = false){

static $singleton = array();//静态函数 用于存储实例化对象

$singIndex = md5($dsn . $DBUser . $DBPwd . $longLink);

if (empty($singleton[$singIndex])) {

$singleton[$singIndex] = new self($dsn, $DBUser, $DBPwd, $longLink = false);

}

return $singleton[$singIndex]->pdo;

}

 

private function connect(){

try{

if($this->longLink){

$this->pdo = new PDO($this->DSN, $this->DBUser, $this->DBPwd, array(PDO::ATTR_PERSISTENT => true));

}else{

$this->pdo = new PDO($this->DSN, $this->DBUser, $this->DBPwd);

}

$this->pdo->query('SET NAMES UTF-8');

} catch(PDOException $e) {

die('Error:' . $e->getMessage() . '
');

}

}

}

  用于处理字段映射,使用pdo的字段映射,可以有效避免sql注入

  ?

1

立即学习PHP免费学习笔记(深入)”;

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

//字段关联数组处理, 主要用于写入和更新数据、同and 或 or 的查询条件,产生sql语句和映射字段的数组

public function FDFields($data, $link = ',', $judge = array(), $aliasTable = ''){

$sql = '';

$mapData = array();

foreach($data as $key => $value) {

$mapIndex = ':' . ($link != ',' ? 'c' : '') . $aliasTable . $key;

$sql .= ' ' . ($aliasTable ? $aliasTable . '.' : '') . '`' . $key . '` ' . ($judge[$key] ? $judge[$key] : '=') . ' ' . $mapIndex . ' ' . $link;

$mapData[$mapIndex] = $value;

}

$sql = trim($sql, $link);

return array($sql, $mapData);

}

//用于处理单个字段处理

public function FDField($field, $value, $judge = '=', $preMap = 'cn', $aliasTable = '') {

$mapIndex = ':' . $preMap . $aliasTable . $field;

$sql = ' ' . ($aliasTable ? $aliasTable . '.' : '') . '`' . $field . '`' . $judge . $mapIndex;

$mapData[$mapIndex] = $value;

return array($sql, $mapData);

}

//使用刚方法可以便捷产生查询条件及对应数据数组

public function FDCondition($condition, $mapData) {

if(is_string($condition)) {

$where = $condition;

} else if (is_array($condition)) {

if($condition['str']) {

if (is_string($condition['str'])) {

$where = $condition['str'];

} else {

return false;

}

}

if(is_array($condition['data'])) {

$link = $condition['link'] ? $condition['link'] : 'and';

list($conSql, $mapConData) = $this->FDFields($condition['data'], $link, $condition['judge']);

if ($conSql) {

$where .= ($where ? ' ' . $link : '') . $conSql;

$mapData = array_merge($mapData, $mapConData);

}

}

}

return array($where, $mapData);

}

  增删改查的具体实现DB.php

  ?

1

立即学习PHP免费学习笔记(深入)”;

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

public function fetch($sql, $searchData = array(), $dataMode = PDO::FETCH_ASSOC, $preType = array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)) {

if ($sql) {

$sql .= ' limit 1';

$pdoStatement = $this->pdo->prepare($sql, $preType);

$pdoStatement->execute($searchData);

return $data = $pdoStatement->fetch($dataMode);

} else {

return false;

}

}

 

public function fetchAll($sql, $searchData = array(), $limit = array(0, 10), $dataMode = PDO::FETCH_ASSOC, $preType = array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY)) {

if ($sql) {

$sql .= ' limit ' . (int) $limit[0] . ',' . (intval($limit[1]) > 0 ? intval($limit[1]) : 10);

$pdoStatement = $this->pdo->prepare($sql, $preType);

$pdoStatement->execute($searchData);

return $data = $pdoStatement->fetchAll($dataMode);

} else {

return false;

}

}

 

public function insert($tableName, $data, $returnInsertId = false, $replace = false) {

if(!empty($tableName) && count($data) > 0){

$sql = $replace ? 'REPLACE INTO ' : 'INSERT INTO ';

list($setSql, $mapData) = $this->FDFields($data);

$sql .= $tableName . ' set ' . $setSql;

$pdoStatement = $this->pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));

$execRet = $pdoStatement->execute($mapData);

return $execRet ? ($returnInsertId ? $this->pdo->lastInsertId() : $execRet) : false;

} else {

return false;

}

}

 

public function update($tableName, $data, $condition, $mapData = array(), $returnRowCount = true) {

if(!empty($tableName) && count($data) > 0) {

$sql = 'UPDATE ' . $tableName . ' SET ';

list($setSql, $mapSetData) = $this->FDFields($data);

$sql .= $setSql;

$mapData = array_merge($mapData, $mapSetData);

list($where, $mapData) = $this->FDCondition($condition, $mapData);

$sql .= $where ? ' WHERE ' . $where : '';

$pdoStatement = $this->pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));

$execRet = $pdoStatement->execute($mapData);

return $execRet ? ($returnRowCount ? $pdoStatement->rowCount() : $execRet) : false;

} else {

return false;

}

}

 

public function delete($tableName, $condition, $mapData = array()) {

if(!empty($tableName) && $condition){

$sql = 'DELETE FROM ' . $tableName;

list($where, $mapData) = $this->FDCondition($condition, $mapData);

$sql .= $where ? ' WHERE ' . $where : '';

$pdoStatement = $this->pdo->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));

$execRet = $pdoStatement->execute($mapData);

return $execRet;

}

}

  测试文件test.php

  ?

1

立即学习PHP免费学习笔记(深入)”;

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

header("Content-type: text/html; charset=utf-8");

define('APP_DIR', dirname(__FILE__));

 

if (function_exists('spl_autoload_register')) {

spl_autoload_register('autoClass');

} else {

function __auto_load($className){

autoClass($className);

}

}

 

function autoClass($className){

try{

require_once APP_DIR.'/class/'.$className.'.php';

} catch (Exception $e) {

die('Error:' . $e->getMessage() . '
');

}

}

$DB = new DB();

//插入

$inData['a'] = rand(1, 100);

$inData['b'] = rand(1, 1000);

$inData['c'] = rand(1,200) . '.' . rand(1,100);

$ret = $DB->insert('a', $inData);

echo '插入' . ($ret ? '成功' : '失败') . '
';

//更新

$upConData['a'] = 100;

$upConJudge['a'] = '

$upConData['b'] = 30;

$upConJudge['b'] = '>';

list($upConStr, $mapUpConData) = $DB->FDField('b', 200, '

$condition = array(

'str' => $upConStr,

'data' => $upConData,

'judge' => $upConJudge,

'link' => 'and'

);

$upData['a'] = rand(1, 10);

$upData['b'] = 1;

$upData['c'] = 1.00;

$changeRows = $DB->update('a', $upData, $condition, $mapUpConData);

echo '更新行数:' . (int) $changeRows . '
';

//删除

$delVal = rand(1, 10);

list($delCon, $mapDelCon) = $DB->FDField('a', $delVal);

$delRet = $DB->delete('a', $delCon, $mapDelCon);

echo '删除a=' . $delVal . ($delRet ? '成功' : '失败') . '
';

 

//查询

$data['a'] = '10';

$judge['a'] = '>';

$data['b'] = '400';

$judge['b'] = '

list($conSql, $mapConData) = $DB->FDFields($data, 'and', $judge);

$mData = $DB->fetch('select * from a where ' . $conSql . ' order by `a` desc', $mapConData);

 

var_dump($mData);

  以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

4

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

7

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

42

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

4

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

3

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.1万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号