PDOc 实例化对象象怎样存储

&span style=&font-family: Arial, Helvetica, sans- background-color: rgb(255, 255, 255);&& 在早些时候,我们通过PHP连接MySQL数据库通常用mysql或mysqli类进行,但这种方式一个缺点是每个拓展都与其他稍有不同,因此使得代码在数据库平台之间轻松的转移变的复杂。虽然这些类库运转良好,但我们要使用更加先进的PDO拓展。&/span&&span style=&font-family: Arial, Helvetica, sans- line-height: 1.8 background-color: rgb(255, 255, 255);&&PDO拓展提供了一组统一功能与各种数据库平台的对话。&/span&
& & PDO是一个抽象层,这表明它建立在PHP以及PHP连接数据库的方式之间。PDO提供了非常简洁的功能来执行查询和遍历数据集。
& & 1、使用pdo连接到mysql
& & 要使用pdo连接到数据库,需要实例化一个新的PDO对象并且传递相关参数(数据库地址、用户名、密码等),代码如下:
$pdo=new PDO('mysql:host=dbname=alpha','root','password');
& & 如果PHP可以连接到数据库,那么将有一个PDO对象保存在变量$pdo中,如果PHP连接数据库失败,那么PDO对象也将创建失败,并会抛出一个PDOException异常。因此正确的连接方式是要将上述代码放到try/catch块中,我们可以通过捕获异常来分析数据库连接失败的原因。
& & 完整代码如下:
$pdo=new PDO('mysql:host=dbname=alpha','root','password');
}catch(PDOException $e){
echo &数据库连接失败,原因是:&.$e-&getMessage();
& & 接下来我们就可以使用新创建的pdo对象$pdo进行数据库相关操作。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:18774次
排名:千里之外
原创:27篇
(2)(1)(1)(1)(2)(2)(2)(1)(1)(8)(2)(1)(2)(3)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'为什么 PHP 应该使用 PDO 方式访问数据库
来源:open开发经验库
很多程序员都学习过如何使用 MySQL 或 MySQLi 扩展访问数据库。在 PHP 5.1 中,有一个更好的方法。
(PDO) 提供了很多预处理语句的方法,且使用对象将使你的工作更有成效! 
PDO 介绍 
“PDO – PHP Data Objects – 是一个对多种数据库提供统一操作方法的数据库访问层。” 
它并不具备数据库特有的语法,但它将使切换数据库和平台更加容易,多数情况下,只需要简单修改链接字符串。 
这并非一篇完整教导如何使用SQL的教程。它重要为那些现今仍在使用 mysql 或 mysqli 扩展的人,帮助他们跃至更具可移植性和强力的 PDO。 
数据库支持 
此扩展可以使用 PDO 驱动编写过的所有数据库。在本文书写时,下面的数据库支持已经实现: 
PDO_DBLIB ( FreeTDS / Microsoft SQL Server / Sybase ) 
PDO_FIREBIRD ( Firebird/Interbase 6 ) 
PDO_IBM ( IBM DB2 ) 
PDO_INFORMIX ( IBM Informix Dynamic Server ) 
PDO_MYSQL ( MySQL 3.x/4.x/5.x ) 
PDO_OCI ( Oracle Call Interface ) 
PDO_ODBC ( ODBC v3 (IBM DB2, unixODBC and win32 ODBC) ) 
PDO_PGSQL ( PostgreSQL ) 
PDO_SQLITE ( SQLite 3 and SQLite 2 ) 
PDO_4D ( 4D ) 
你的系统不会也不必支持所有上面的驱动;下面是一个快速检查所支持数据库的方法: 
print_r(PDO::getAvailableDrivers());
连接 
不同数据库的连接方法可能稍有不同,下面是一些较为流行的数据库连接方法。你将注意到,虽然数据库类型不同,前三种数据库的连接方式是相同的——而 SQLite 使用自己的语法。 
# MS SQL Server and Sybase with PDO_DBLIB
$DBH = new PDO("mssql:host=$dbname=$dbname, $user, $pass");
$DBH = new PDO("sybase:host=$dbname=$dbname, $user, $pass");
# MySQL with PDO_MYSQL
$DBH = new PDO("mysql:host=$dbname=$dbname", $user, $pass);
# SQLite Database
$DBH = new PDO("sqlite:my/database/path/database.db");
catch(PDOException $e) {
echo $e-&getMessage();
注意 try/catch 块——你应该总是使用 try/catch 包装你的 PDO 操作,并使用异常机制——这里只是简单的示例。通常,你只需要一个连接——有很多可以教你语法的列表。 $DBH 代表“数据库句柄”,这将贯穿全文。 
通过将句柄设置为 NULL,你可以关闭任一连接。 
# close the connection
你可以在找到更多数据库特定选项和/或其它数据库连接字符串的信息。 
异常与 PDO 
PDO 可以使用异常处理错误,这意味着你的所有 PDO 操作都应当包装在一个 try/catch 块中。你可以通过设定错误模式属性强制 PDO 在新建的句柄中使用三种错误模式中的某一个。下面是语法: 
$DBH-&setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT );
$DBH-&setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
$DBH-&setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); 无论你设定哪个错误模式,一个错误的连接总会产生一个异常,因此创建连接应该总是包装在 try/catch 块中。 
PDO::ERRMODE_SILENT 
这是默认的错误模式。如果你使用这个模式,你将得使用同 mysql 或 mysqli 扩展一样的方法差错。其它两种模式更适合 DRY 编程。 
PDO::ERRMODE_WARNING 
此方法将会发出一个标准PHP警告,并允许程序继续运行。这对调试很有帮助。 
PDO::ERRMODE_EXCEPTION 
这是多数情况下你所希望的方式。它生成异常,允许你更容易的处理错误,隐藏可能导致它人了解你系统的信息。下面是一个充分利用异常的示例: 
# connect to the database
$DBH = new PDO("mysql:host=$dbname=$dbname", $user, $pass);
$DBH-&setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
# UH-OH! Typed DELECT instead of SELECT!
$DBH-&prepare('DELECT name FROM people');
catch(PDOException $e) {
echo "I'm sorry, Dave. I'm afraid I can't do that.";
file_put_contents('PDOErrors.txt', $e-&getMessage(), FILE_APPEND);
在 select 语句中有一个故意留下的错误;这将导致一个异常。异常错误细节保存至一个 log 文件,并生成一段友好的(或不怎么友好的)信息於用户。 
插入和更新 
插入新数据,更新已存数据是一种非常常见的数据库操作。使用 PDO,这通常需要两个步骤。本节中所述的所有内容对更新和插入都有效。 
这里有一个最基本的插入示例: 
# STH means "Statement Handle"
$STH = $DBH-&prepare("INSERT INTO folks ( first_name ) values ( 'Cathy' )");
$STH-&execute(); 你也可以使用 exec() 完成相同的操作,这将减少调用。多数情况下,你会使用调用多的方法,以充分利用语句预处理的优势。即使你只用它一次,使用语句预处理,帮助你保护你的 SQL 免于注入攻击。 
预处理语句 
使用语句预处理将帮助你免于SQL注入攻击。 
一条预处理语句是一条预编译的 SQL 语句,它可以使用多次,每次只需将数据传至服务器。其额外优势在于可以对使用占位符的数据进行安全处理,防止SQL注入攻击。 
你通过在 SQL 语句中使用占位符的方法使用预处理语句。下面是三个例子:一个没有占位符,一个使用无名占位符,一个使用命名占位符。 
# no placeholders - ripe for SQL Injection!
$STH = $DBH-&("INSERT INTO folks (name, addr, city) values ($name, $addr, $city)");
# unnamed placeholders
$STH = $DBH-&("INSERT INTO folks (name, addr, city) values (?, ?, ?);
# named placeholders
$STH = $DBH-&("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)"); 你希望避免第一种方法。选择命名我无名占位符将会对你对语句中数据的设置产生影响。 
无名占位符 
# assign variables to each place holder, indexed 1-3
$STH-&bindParam(1, $name);
$STH-&bindParam(2, $addr);
$STH-&bindParam(3, $city);
# insert one row
$name = "Daniel"
$addr = "1 Wicked Way";
$city = "Arlington Heights";
$STH-&execute();
# insert another row with different values
$name = "Steve"
$addr = "5 Circle Drive";
$city = "Schaumburg";
$STH-&execute(); 这里有两步。首先,我们对各个占位符指定变量(2-4行)。然后,我们对各个占位符指定数据,并执行语句。要发送另一组数据,只需改变这些变量的值并再次执行语句。 
这种方法看上去对拥有很多参数的语句很笨拙吧?的确。然而,当数据保存于数组中时,这非常容易简略: 
# the data we want to insert
$data = array('Cathy', '9 Dark and Twisty Road', 'Cardiff');
$STH = $DBH-&("INSERT INTO folks (name, addr, city) values (?, ?, ?);
$STH-&execute($data); 容易吧! 
数组中的数据按顺序填入占位符中。 $data[0]是第一个,$data[1]是第二个,依次。不过,要是数组中数据的次序不正确,这将不能正常运行,你需要先对数组排序。 
命名占位符 
你可能已经开始猜测语法了,不过下面就是示例: 
# the first argument is the named placeholder name - notice named
# placeholders always start with a colon.
$STH-&bindParam(':name', $name); 你可以看使用快捷方式,但它需使用关联数组。下面是示例: 
# the data we want to insert
$data = array( 'name' =& 'Cathy', 'addr' =& '9 Dark and Twisty', 'city' =& 'Cardiff' );
# the shortcut!
$STH = $DBH-&("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");
$STH-&execute($data); 数组中的键不需要以冒号开头,但其它部分需要同占位符匹配。如果你有一个二维数组,你只需遍历它,并对遍历的每个数组执行语句。 
命名占位符的另一个好的功能是直接将对象插入到你的数据库中,只要属性同命名字段匹配。下面是一个示例对象,以及如何将它插入到数据库中的示例: 
# a simple object
class person {
public $
public $
public $
function __construct($n,$a,$c) {
$this-&name = $n;
$this-&addr = $a;
$this-&city = $c;
# etc ...
$cathy = new person('Cathy','9 Dark and Twisty','Cardiff');
# here's the fun part:
$STH = $DBH-&("INSERT INTO folks (name, addr, city) value (:name, :addr, :city)");
$STH-&execute((array)$cathy); 通过在执行时将对象转换为数组,输将将会同数组的键一样对待。 
Selecting Data 
数据通过语句句柄的-&fetch() 方法获取。在调用 fetch 之前,最好通知 PDO 你所希望获取数据的方式。你有如下选项: 
PDO::FETCH_ASSOC:返回一个通过字段名称索引的数组。 
PDO::FETCH_BOTH (default):返回一个数组,同时通过序号和名称索引。 
PDO::FETCH_BOUND:通过-&bindColumn() 方法绑定变量获取返回值 
PDO::FETCH_CLASS: 将返回值分配给一个命名类。如果类匹配属性不存在,则将创建相应的属性。 
PDO::FETCH_INTO: 更新一个命名类现有的实例化对象。 
PDO::FETCH_LAZY: 结合 PDO::FETCH_BOTH/PDO::FETCH_OBJ, 同它们各自方式一样创建对象的变量名称。 
PDO::FETCH_NUM:返回一个按列顺序数字索引的数组 
PDO::FETCH_OBJ:返回一个匿名对象,属性名称对应列名。 
在实际应用中,三个就能涵盖大多数情况:FETCH_ASSOC、FETCH_CLASS 和 FETCH_OBJ。要设定 fetch 方法,使用如下语法: 
$STH-&setFetchMode(PDO::FETCH_ASSOC); 你也可以在调用 -&fetch() 方法时直接设定。 
FETCH_ASSOC 
这个 fetch 创建一个关联数组,通过列的名称索引。这对使用过 mysql/mysqli 扩展的人应该相当熟悉。下面是通过此方法获取数据的示例: 
# using the shortcut -&query() method here since there are no variable
# values in the select statement.
$STH = $DBH-&query('SELECT name, addr, city from folks');
# setting the fetch mode
$STH-&setFetchMode(PDO::FETCH_ASSOC);
while($row = $STH-&fetch()) {
echo $row['name'] . "\n";
echo $row['addr'] . "\n";
echo $row['city'] . "\n";
} while 循环将继续逐行遍历结果集,直到遍历完毕。 
FETCH_OBJ 
此 fetch 将为返回数据的每一行创建一个标准对象。示例如下: 
# creating the statement
$STH = $DBH-&query('SELECT name, addr, city from folks');
# setting the fetch mode
$STH-&setFetchMode(PDO::FETCH_OBJ);
# showing the results
while($row = $STH-&fetch()) {
echo $row-&name . "\n";
echo $row-&addr . "\n";
echo $row-&city . "\n";
} FETCH_CLASS 
对象的属性将在构造函数被调用之前完成设置,这点非常重要。 
此 fetch 方法允许你将获取结果直接填入你选择的类中。当使用 FETCH_CLASS 时,对象的属性将在构造函数被调用之前完成设置。再读一遍,这点相当哪个重要。如果匹配列名称的属性不存在,这些属相将被创建(以 public 方式)。 
这意味着,如果你的数据在从数据库中读取后需要转化处理,它可以在每个对象创建时由对象自动处理。 
例如,假如每条记录的地址都需要掩盖一部分。我们可以在构造函数中操作这个属性。示例如下: 
class secret_person {
public $
public $
public $
public $other_
function __construct($other = '') {
$this-&address = preg_replace('/[a-z]/', 'x', $this-&address);
$this-&other_data = $
} 当数据被获取到类中时,地址的所有小写字母 a-z 都被 x 替换。现在,使用类和完成数据转化是完全透明的。 
$STH = $DBH-&query('SELECT name, addr, city from folks');
$STH-&setFetchMode(PDO::FETCH_CLASS, 'secret_person');
while($obj = $STH-&fetch()) {
echo $obj-&
} 如果地址是 ’5 Rosebud,’,你将看到 ’5 Rxxxxxx’ 这样的输出。当然,有时你希望构造函数在数据设置之前被调用。PDO 也考虑到这种情形。 
$STH-&setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, 'secret_person');
现在,当你使用这个 fetch 模式(PDO::FETCH_PROPS_LATE)重复前一个示例代码时,地址不会被掩盖,因为构造函数在属性分配之前就被调用了。 
最后,如果你真的需要,你可以在使用 PDO 获取数据到对象中时传值给构造函数: 
$STH-&setFetchMode(PDO::FETCH_CLASS, 'secret_person', array('stuff')); 如果你对每个对象的构造函数传递的数据不同,你可以在 fetch 方法中设置 fetch 模式。 
$i = 0;
while($rowObj =
$STH-&fetch(PDO::FETCH_CLASS, 'secret_person', array($i))) {
// do stuff
} 其它一些有用的方法 
尽管并不是说 PDO 就涵盖了一切(它并非一个庞大的扩展!)。它依然有一些其它的方法,在使用 PDO 做一些基础工作时会用到。 
$DBH-&lastInsertId(); -&lastInsertId() 方法永远在数据库句柄上被调用,而非语句句柄,并将返回该连接插入的最后一条插入行的自增长id值。 
$DBH-&exec('DELETE FROM folks WHERE 1');
$DBH-&exec("SET time_zone = '-8:00'"); -&exec() 方法被用来执行那些无返回值或影响行数据的的命令。上面就是两条使用exec 方法的例子。 
$safe = $DBH-&quote($unsafe); -&quote() 方法将过滤字符串引号,这样你就可以在查询语句中安全的使用了。此返回函数适应于不适用预处理语句的情形。 
$rows_affected = $STH-&rowCount(); -&rowCount() 方法返回一个操作影响数据行的数量整数。在某个已知PDO版本中,根据 [this bug report](http://bugs.php.net/40822) 该方法对 select 语句无效。如果你遭遇此问题,请更新PHP,你也可以使用下面的代码获取行数: 
$sql = "SELECT COUNT(*) FROM folks";
if ($STH = $DBH-&query($sql)) {
# check the row count
if ($STH-&fetchColumn() & 0) {
# issue a real select here, because there's data!
else {
echo "No rows matched the query.";
} 总结 
我希望本文能够帮助你从 mysql 和 mysqli 扩展中迁移出来。你怎么想,有没有人愿意换个口味尝个鲜? 
本文地址:
原文地址:
免责声明:本站部分内容、图片、文字、视频等来自于互联网,仅供大家学习与交流。相关内容如涉嫌侵犯您的知识产权或其他合法权益,请向本站发送有效通知,我们会及时处理。反馈邮箱&&&&。
学生服务号
在线咨询,奖学金返现,名师点评,等你来互动&>&PDO操作mysql数据库的实用类
PDO操作mysql数据库的实用类
上传大小:2KB
1、PDO操作数据库的单例类;PDO(&mysql:host=数据库主机;dbname=数据库名;&,'用户名','密码')
2、$--用来存储实例化后的对象
3、__construct()--实例化PDO
4、getInstance()--实例化类的方法
5、sel_assoc($sql)--参数:sql语句;功能:查;以二维关联数组形式返回===成功返回true===失败返回false
6、sel_num($sql)--参数:sql语句;;功能:查;以二维关联数组形式返回===成功返回true===失败返回false
7、db_exec($sql)--参数:sql语句;功能:增、删、改;以二维索引数组形式返回===成功返回true===失败返回false
实例化对象: $db = Single::getInstance();...展开收缩
综合评分:4(10位用户评分)
所需积分/C币:
下载个数:65
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有4条
简单实用 不错不错
因为是初学者 所以也不是很了解 文档格式的 看看学了
写的很简单,有些帮助意义
非常非常的简单。
很简单的类
审核通过送C币
创建者:chenhongxin
MySQL数据库学习电子书
MySQL经典教程书籍合集
创建者:youlanyu_kv
上传者其他资源上传者专辑
TP3.2的Session的Redis分布式驱动
基于jquery的裁剪工具-jcorp
php_gtk2_win安装程序及中文开发手册
小措施提高Linux服务器安全
5种流行的Linux发行版
数据库热门标签
VIP会员动态
找不到资源?发布悬赏任务百万程序猿帮你提供!
下载频道部分积分规则调整公告
开通VIP,海量IT资源任性下载
二十大技术领域优质资源
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&VIP年卡&4000万程序员的必选
PDO操作mysql数据库的实用类
会员到期时间:
剩余下载个数:
剩余C币:0
剩余积分:6726
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
(仅够下载10个资源)
全站1200个资源免积分下载
资源所需积分/C币
当前拥有积分
当前拥有C币
全站1200个资源免积分下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
全站1200个资源免积分下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
zhang_loya
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
PDO操作mysql数据库的实用类php中PDO方式实现数据库的增删改查
投稿:hebedich
字体:[ ] 类型:转载 时间:
PDO是mysql数据库操作的一个公用类了,我们不需要进行自定类就可以直接使用pdo来操作数据库了,但是在php默认配置中pdo是未开启所以我们必须先在php.ini中开启它才可以使用。
需要开启php的pdo支持,php5.1以上版本支持
实现数据库连接单例化,有三要素 静态变量、静态实例化方法、私有构造函数 DPDO.php
class DPDO{
private $DSN;
private $DBU
private $DBP
private $longL
//私有构造函数 防止被直接实例化
private function __construct($dsn, $DBUser, $DBPwd, $longLink = false) {
$this-&DSN = $
$this-&DBUser = $DBU
$this-&DBPwd = $DBP
$this-&longLink = $longL
$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]-&
private function connect(){
if($this-&longLink){
$this-&pdo = new PDO($this-&DSN, $this-&DBUser, $this-&DBPwd, array(PDO::ATTR_PERSISTENT =& true));
$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注入
//字段关联数组处理, 主要用于写入和更新数据、同and 或 or 的查询条件,产生sql语句和映射字段的数组
public function FDFields($data, $link = ',', $judge = array(), $aliasTable = ''){
$sql = '';
$mapData = array();
foreach($data as $key =& $value) {
$mapIndex = ':' . ($link != ',' ? 'c' : '') . $aliasTable . $
$sql .= ' ' . ($aliasTable ? $aliasTable . '.' : '') . '`' . $key . '` ' . ($judge[$key] ? $judge[$key] : '=') . ' ' . $mapIndex . ' ' . $
$mapData[$mapIndex] = $
$sql = trim($sql, $link);
return array($sql, $mapData);
//用于处理单个字段处理
public function FDField($field, $value, $judge = '=', $preMap = 'cn', $aliasTable = '') {
$mapIndex = ':' . $preMap . $aliasTable . $
$sql = ' ' . ($aliasTable ? $aliasTable . '.' : '') . '`' . $field . '`' . $judge . $mapI
$mapData[$mapIndex] = $
return array($sql, $mapData);
//使用刚方法可以便捷产生查询条件及对应数据数组
public function FDCondition($condition, $mapData) {
if(is_string($condition)) {
$where = $
} else if (is_array($condition)) {
if($condition['str']) {
if (is_string($condition['str'])) {
$where = $condition['str'];
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 : '') . $conS
$mapData = array_merge($mapData, $mapConData);
return array($where, $mapData);
增删改查的具体实现DB.php
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);
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);
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 ' . $setS
$pdoStatement = $this-&pdo-&prepare($sql, array(PDO::ATTR_CURSOR =& PDO::CURSOR_FWDONLY));
$execRet = $pdoStatement-&execute($mapData);
return $execRet ? ($returnInsertId ? $this-&pdo-&lastInsertId() : $execRet) :
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 .= $setS
$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) :
public function delete($tableName, $condition, $mapData = array()) {
if(!empty($tableName) && $condition){
$sql = 'DELETE FROM ' . $tableN
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 $execR
测试文件test.php
header("Content-type: text/ charset=utf-8");
define('APP_DIR', dirname(__FILE__));
if (function_exists('spl_autoload_register')) {
spl_autoload_register('autoClass');
function __auto_load($className){
autoClass($className);
function autoClass($className){
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);
以上所述就是本文的全部内容了,希望大家能够喜欢。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 实例化对象的方法 的文章

 

随机推荐