当前位置:首页 >> 计算机软件及应用 >>

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


php中PDO方式实现数据库的增删改查
PDO是mysql数据库操作的一个公用类了,我们不需要进行自定类就可以直接使用pdo来操作数据库了,但是在php默认配置中pdo是未 开启所以我们必须先在php.ini中开启它才可以使用。 需要开启php的pdo支持,php5.1以上版本支持 实现数据库连接单例化,有三要素 静态变量、静态实例化方法、私有构造函数 DPDO.php ? 1 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
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() . '<br/>' ); } } }

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

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8

//字段关联数组处理, 主要用于写入和更新数据、同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 ); }

3 9 4 0 4 1 4 2 增删改查的具体实现DB.php ?

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 2 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8

public function fetch( $sql , $searchData = array (), $dataMode = PDO::FETCH_ASSOC, $preType = array (PDO::ATTR_CURSO R => 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, $pr eType = 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 );

3 9 4 0 4 1 4 2 4 3 4 4 4 5 4 6 4 7 4 8 4 9 5 0 5 1 5 2 5 3 5 4 5 5 5 6 5 7 5 8 5 9 6 0 6 1 ?

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 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() . '<br />' ); } } $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 ? '成功' : '失败' ) . '<br/>' ; //更新 $upConData [ 'a' ] = 100; $upConJudge [ 'a' ] = '<' ; $upConData [ 'b' ] = 30; $upConJudge [ 'b' ] = '>' ; list( $upConStr , $mapUpConData ) = $DB ->FDField( 'b' , 200, '<' , 'gt' ); $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 . '<br/>' ; //删除 $delVal = rand(1, 10); list( $delCon , $mapDelCon ) = $DB ->FDField( 'a' , $delVal ); $delRet = $DB -> delete ( 'a' , $delCon , $mapDelCon ); echo '删除a=' . $delVal . ( $delRet ? '成功' : '失败' ) . '<br/>' ; //查询 $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中PDO方式实现数据库的增删改查.pdf
php中PDO方式实现数据库的增删改查 - php中PDO方式实现数据库的增删改查 PDO是mysql数据库操作的一个公用类了,我们不需要进行自定类就可以直接使用pdo来操作数据...
Php中使用PDO操作MySQL数据库(查询 更新 删除).doc
Php中使用PDO操作MySQL数据库(查询 更新 删除) PDO是mysql数据库操作的一个公用...extension=php_pdo_mysql.dll 这里是使用PDO对mysql进行基本的增删改查操作 程序...
04PDO增删改查预处理.doc
04PDO增删改查预处理_计算机软件及应用_IT/计算机_...只能被实现 implements。 PHP 重载:当访问一个不...数组,可以通过方法指定 参数来修改获取数据的方式。 ...
PHP使用PDO方式操作Mysql类.doc
//数据库类型,oracle 用 ODI,对于开发者来说,使用不 同的数据库,只要改这个...php中PDO方式实现数据库... 8页 免费 PHPmysql数据库操作类 8页 1下载券...
第10章 PDO方式访问数据库.ppt
2 PDO访问异构数据库的方法 10.2.1 安装PDO 在Windows环境下PHP 5.1以上版本中,PDO和主要数据库的驱动同PHP一起作 为扩展发布,要激活它们只需要简单地编辑php...
PHP5中使用PDO连接数据库的方法_php技巧_脚本之家_图文.pdf
PHP5中使用PDO连接数据库的方法_php技巧_脚本之家 - 2014年9月8日 脚本之家 www.jb51.net PHP5中使用PDO连接数据库的方法_php技巧_脚本之家 专题 ...
第3章 PHP操作数据库_图文.ppt
需要开启时,在php.ini配置文件中找到 ;extension=php_pdo_mysql.dll ? 去掉...在MySQL数据库中,通过执行SQL语句可以实现数据库的增、删、改、 查等操作。而...
PDO数据库.txt
(); 3、执行操作 增、删、改、查 pdo准备语句执行增删改查 4、视操作结果 ...php中PDO方式实现数据库... 8页 免费 Php中使用PDO操作MySQL数... 1页 免...
mysql函数仿pdo操作数据库类.doc
由于从今年开始 哈尔滨智华软件的 php 课程在数据库操作的学习改为以 pdo 为主...可以实现 pdo 方式改为 mySQL 函数方式了 pdo 的增删改都一样的,代码如下: ...
PHP 在5.1. 和5.2.之间 PDO数据库操作中的不同.doc
PHP 在5.1. 和5.2.之间 PDO数据库操作中的不同_计算机软件及应用_IT/计算机_专业资料。介绍今天发现 php5.1.*和 php5.2.*在数据库预编译代码执行时候...
第1章 PHP操作数据库_图文.ppt
会使用 PHP对MySQL数据库进行增、删、改、查操作 2 掌握PDO扩展, 熟悉mysqli...在PHP的mysql扩展中通常使用mysql_connect()函数与其建立连接。 其声明方式如下:...
PHP开发中Phalcon框架中的数据库操作.doc
PHP-Phalcon 框架中的数据库操作 >本文描述了 PHP-...参数来实现数据库的连接和配置,基本配置方法 如下...usePhalcon\Db\Adapter\Pdo\MysqlasDbAdapter; $di...
PHP连接数据库实验.doc
3 研究通过 PDO 访问 mysql 数据库 创建一个 php 文件,内容如下。分析页面的输出。 <?php $dsn = 'mysql:dbname=mysql;host=127.0.0.1'; $user = '...
PHP使用PDO教程.doc
PDO(PHP Data Object) 是 PHP 5 新出来的东西,在 PHP 6 都要出来的时候,PHP 6 只默 认使用 PDO 来处理数据库,将把所有的数据库扩展移到了 PECL,那么...
五个常见 PHP数据库问题.pdf
五个常见 PHP 数据库问题 如果只有一种方式使用数据库是正确,您可以用很多...使用 PEAR DB 模块和 PDO 抽象层另一个价值在于您可以在 SQL 语句中使用 ...
yii的AR增删改查实例.doc
YII(AR) ---Yii 操作数据库的 3 种方法---...--- 一、执行原生太 SQL 的 PDO 方式。 复制代码代码...C# xml 增删查改实例 4页 免费 Php简单增、删、...
PHP中的PDO函数库(PDO Functions).pdf
PHP中的PDO函数库(PDO Functions) - 文档来源:http://www.phphubei.com PDO 是一个数据库访问抽象层,作用是统一各种数据库的访问接口,与 mysql...
pdo使用详解.txt
POD(PHP Data Object)扩展在PHP5加入,PHP6中将默认识用PDO连接数据库,所有非PDO扩展将会在PHP6被从扩展中移除。该扩展提供PHP内置类 PDO对数据库进行访问,...
五个常见 PHP 数据库问题.pdf
您可以用很多的方式创建数据库设计、数据库访问和基于数据库的 PHP 业务逻辑代码...使用 PEAR DB 模块和 PDO 抽象层另一个价值在于您可以在 SQL 语句中使用 ...
(个人收集学习笔记)11 PDO数据库抽象层.pdf
一、 基本概念 1、 PDO:PHP Data Object 的缩写...2、 对任何数据库的操作,并不是使用 PDO 扩展本身...():执行增删改,返回受影响行数,执行失败返回 false...
更多相关文章: