作者归档:月夜

php学习练习(1)-简单的日历类

追溯到我专职写程序的日子已经是若干年以前了,依稀记得从08年后半年开始,就没有在工作中专职全力写程序了,偶尔写点也是基于验证性的东西。当然不把写程序当作职业中的一部分是有很多借口,但都是借口,虽然年龄已经不小了,但是重新捡起来还是可以的,最近恰逢想要写一个系统,于是开始动手。

有「归零」的心态加上持续的练习是必不可少的,提高写程序的水平唯一方法就是不断的进行编码练习。当然练习是基于获取知识后的实践,再结合项目实际应用,积累一段时间后,自然会重新站起,在自己的博客上记录一下这段时间,今天从一个简单日历类开始。

实现基本的日历类Calendar功能,类向外公开一个display方法用于显示日历,能够按照月、年显示日历信息,简单日历类主要练习PHP的一部分日期时间函数,基于功能,类图如下:

calendar

display方法用于显示日历
weekList方法用于列出日历中的星期
daysList方法用于列出每个月的天数
editDate方法用于改变日历显示
构造方法完成对成员的初始化

类文件名为:calendar.class.php ,测试文件为:test.php ,具体代码如下:

year = isset($_GET['year']) ? $_GET['year'] : date('Y');
    $this->month = isset($_GET['month']) ? $_GET['month'] : date('m');
    $this->daysOfMonth = date('t', mktime(0, 0, 0, $this->month, 1, $this->year));
    $this->dayOfWeek = date('w', mktime(0, 0, 0, $this->month, 1, $this->year));
  }

  function display() {
    echo '';
    $this->editDate();
    $this->weekList();
    $this->daysList();
    echo '
} private function weekList() { $week = array('日','一','二','三','四','五','六'); echo ''; for($i = 0; $i < count($week); $i++) { echo ''. $week[$i] .''; } echo ''; } private function daysList() { echo ''; for($col = 0; $col < $this->dayOfWeek; $col++) echo ' '; for($day = 1; $day <= $this->daysOfMonth; $day++) { $col++; if($day == date('d')) { echo ''. $day .' } else { echo ''. $day .''; } if($col % 7 == 0) { echo ''; } } echo ''; } private function editDate() { echo ''; echo '<<'; echo '<'; echo ''. $this->year . '年'. $this->month .'月'; echo '>'; echo '>>'; echo ''; } private function prevYear($year, $month) { $year--; if($year == 1970) { $year = 1970; } return 'year=' . $year . '&month=' . $month; } private function prevMonth($year, $month) { $month--; if($month<1) { $month = 12; $year--; } return 'year=' . $year . '&month=' . $month; } private function nextMonth($year, $month) { $month++; if($month > 12) { $month = 1; $year++; } return 'year=' . $year . '&month=' . $month; } private function nextYear($year, $month) { $year++; return 'year=' . $year . '&month=' . $month; } } ?>

测试文件test.php,代码如下:

display();
?>

测试结果:
calendar.test

到这里就完成了这个简单的日历类,当然该类是仅仅用于展示日历的一个练习,如果用于实际则需要进一步改进,有几个方面可进一步改进:

1. 日历类一般用于前端,用javascript实现日历类在实际项目中应用应该好于用php这个服务器的脚本语言实现;
2. 如用php则应该非本练习中这样整页面向服务器提交请求,而应该使用AJAX就该日历部分展示与服务器进行异步数据传输;
3. 就功能上可增加输入年跟月来获取日历的方式;
4. 就展现上可采用模板,并用层叠样式表来设定样式;

–EOF–

2013年工作总结

2013年的工作截止于11月初,最终以公司结束运营惨淡收场,这一次的工作开始的快,同样结束的也快,整个周期历时一年。非常欣慰能有这一次的工作经历,毕竟这是我第一次能够有这样一个机会算是全权负责整个公司的运营,虽然结果令人遗憾,但这一段旅程尽力了,所以不会有任何的遗憾。想要获取期望的结果很难,总结得失后重新启程,期望最终会在不断坚持努力中悄然而来。非常感谢小伙伴们这一年来的支持与努力,非常感谢投资人能给我这样一次共同合作的机会。

工作主要节点

2012年11月1日开始加入「神州物联网商务股份有限公司」,期初任职副总经理职位,主要负责技术方向的管理与规划,主导协调市场营销副总及公司日常管理,于2013年1月底任职总经理职位,开始全权负责公司的整体运营,直至2013年11月初公司结束运营。

万事开头难

刚进入公司,在我面前的是公司注册资金一个亿,有广州分公司,想立足长远做一些事情,有充足的耐心,过去经营两年虽然失败仍然不放弃,刚裁撤完的公司团队不算我4个人,广州两人郑州两人,在经营触摸电子签到系统这样一个整体框架。情况还不错,至少不需要重新注册公司,至少还有业务在做。

这种情况下基本上可以说是要从零开始,以前的基本没有留下什么,重新的开始就是希望依托我的从业经验引入新的业务,进行新一轮的试错,也就是从此时开始合作,进入蜜月期。但往往期望都是美好的,结果却十之八九不如意。

收获:
未来除非比较知根知底的人,或能进行深入了解一番,要避免这样的开始,投资中「不熟不投」还是非常有道理的,或者就是要明确用多少费用多少周期完成试错;要明白的是双方具有同等的风险,时间风险和资金风险在有时候同等重要;要尽自己最大的能力明确试错的范围,细化的越细越好,最好能够有原型或半成品,并就此双方达成一致;为降低风险或共担风险,在能力范围内合作者都最好注入资金,并明确收益。

行走在路上

在任何时候面临的问题都很多,想法解决问题才是需要做的,那么「我们要做些什么?做这些需要谁来做?需要我们怎么做?」是在下面路上需要解决的问题。

准备要做的:「寻求企业信息化类IT项目」+ 「研发自主产品」
需要谁来做:「招兵买马」
需要怎么做:「规章制度 」+ 「团队建设」 + 「绩效考核」 + 「资金财务」

信息化类IT项目

寻求企业信息化类IT项目主要依托市场营销寻求一些本地化的企业及政府信息化类IT项目,其主要目的是想通过项目带来一定的现金流并使团队逐步成熟。这一年中参与竞争运作的项目共有5个,分别是某医院消毒供应中心追溯管理项目,某干休所基地综合管理系统,物流信息管理系统,项目地理信息管理系统,移动电视项目。直到结束都没有拿到合同,有些项目丢单,有些项目仍在待走的流程中。

研发自主产品

研发自主产品依据公司准备做的大方向,在行业成熟度相对较低的情况下,接近物联网底层的产品研发有一定的机会,确定研发的自主产品为「基于Zigbee协议的自组网传感数据采集设备」。对于该产品的规划分为三个周期:

1. 体现在研发、设计、生产能够自动组网的,基于Zigbee协议的低功耗,终端模块带传感器的网络设备套件,整个硬件最终产出为两部分,一部分为数据管理及传输单元,另一部分为数据采集终端。基于传感器的自组网设备作为物联网底层单元具有很大的空间,同时作为公司的产品对公司未来运作的项目给以支撑。

2. 对终端数据采集部分的定制,可以向家用消费方向,行业解决方案方向过度,例如形成面向消费者的温湿环境电子仪表,可联动未来智能家居控制单元;形成基于农业、工业等诸多行业的底层数据供应,联动自动控制设备,提高行业智能化。

3. 开发数据接入平台,给用户提供基于该设备的数据采集及接入服务,形成物联网的数据接入平台,为用户提供服务。

在8月份完成了硬件设备原型的研发,形成了核心板卡及原型设备,能够完成自组网及对于温度湿度数据的采集,电路设计方面有不太稳定的地方,先后印刷制作两次电路板,仍然需要继续调试,在协议方面需要编写通讯协议。完成了第一周期的一小半。

除了硬件设备的研发之外,还做了一些其他的工作:

(1)易签到系统的重新开发
(2)基于Saas的智能图书馆管理系统
(3)共享网
(4)面向中小企业的办公助手
(5)团队日志管理系统
(6)寻求手机家电遥控器、微型投影仪、临床检验系统(LIS) 这些产品的经营合作。

招兵买马

人是企业经营中最为关键的资源,确定了目标(准备要做的)之后,紧接着就是招兵买马,一个稳定互补的团队是弥足珍贵的,可惜大部分情形下却是没有的。没有就需要招兵买马,然后培养磨合。这方面直至3月份才形成初步团队,周期拉的太长。

前前后后从市场营销占主导的招兵买马到技术研发占主导的招兵买马消耗了很多的时间,来来去去的流失了不少的人员,在本来环境就不太理想的郑州来说,其周期远远长于预期。

日常运营管理

制度、团建、绩效、资金在日常运营中得以体现,建立了基本的相对比较简单的员工手册、营销的管理考核制度,设定了基本的福利保障,一定的基本培训及组织活动、技术交流,在资金投入上很大程度仅仅是日常活动及薪资支出。日常运营管理是一个动态的过程,从开始的有且缺少慢慢增减,逐步完善。

日常运营管理形成的氛围相对比较宽松,更多的依托成员的自觉,给予的压力不足,太理想化了,对于市场营销的团队建设缺乏经验,以至于很难管理其日常的工作,缺乏帮助其完成工作的手段,也很难安排合理的计划。

收获:
在没有合适的市场营销导向下的工作往往没有头绪,如何将产品或技术结合到市场营销,形成良性的正反馈,在这方面我还有很远的路要走,寻找到能够互补的合作伙伴是当前需要做的;从一个合同项目出发上路是能够最大程度上降低风险的;想做的太多不如专注做一个,最终结果对于初创企业是一样的,不存在遍地开花,因为没有那么多的资源;一直在考虑不能事无巨细的参与,但是如何加强控制与管理,在没有理想的阶梯队形下该如何做?项目推进过程中该投入的地方一定要投入;公司运营初期,如以项目引导性开局,应建立市场营销型团队;跨界不是那么容易的,既要保持技术研发中的逻辑性,又要注重变通性;阔别10年的环境对自己其实是一个零,要有从零开始的心态;要首先将自己推销出去,建立自己的人脉,没事多找人聊聊天。

告别蜜月期及走向结束

往往在说有足够耐心的时候就不会有太多的耐心,而且这个耐心是相对的,从一开始就知道想要延长试错的周期,必须要带来新的现金流,以前的易签到系统(本身是有收入的)不算,所以从一开始就计划从项目开始,开始甚至没招技术人员,我客串临时完成技术方面的工作,奈何碰到不太靠谱的营销管理人员,随着刚组建的营销团队的分崩离析,然后再次组建团队无形浪费了很多的时间,时间的增长会让大家越来越没有耐心,整个团队从开始逐渐告别蜜月期,如果此时再有一些外在影响的推波助澜,则会迅速走向结束。

没有耐心就会急躁,在这一年中表现在想通过寻找到各种类型的产品及各种想象中能带来收益系统研发,以此来打开期望之门,其实现在想想,这样做的同时也就注定了终将结束。

这一年非常有收获的一点就是尝试了在非技术研发岗位上的工作,并且发现很多需要提高的地方,这是非常好的事,尽管这次的尝试没有成功,能够在表象迈出这一步是很重要的,接下来在思想上也应该迈出这一步。

终点就是另一个新的起点,再见2013!

btw:

另外还有一些工作,最终选择了退出,主要基于两点: 「想做的事情太多就少了专注」 + 「没有能力范围内的资金投入」。

2013年读过的书

2013年就要过去了,这一年对于我来说最大的变化就是在一个稳定的生活环境渡过了这一年,这里的稳定指的是从去年年底离开了北京,结束了10年的北漂,回到了郑州自己的蜗居,尽管这一年的工作并不是很顺,但是心境却平静了许多,慢慢也捡起了读书的习惯,到年底罗列一下这一年读过的书。

个人藏书

01. 《IT创业疯魔史
02. 《没有任何借口
03. 《乌合之众:大众心理研究
04. 《青春
05. 《瞬间之美:Web界面设计如何让用户心动
06. 《白帽子讲Web安全
07. 《重来:更为简单有效的商业思维
08. 《四步创业法
09. 《精益创业:新创企业的成长思维
10. 《影响力:经典版
11. 《史玉柱自述:我的营销心得
12. 《启示录:打造用户喜爱的产品
13. 《异类:不一样的成功启示录
14. 《引爆点:如何制造流行
15. 《jQuery基础教程
16. 《开发高质量PHP框架与应用的实际案例解析
17. 《长尾理论
18. 《需求:缔造伟大商业传奇的根本力量
19. 《PHP和MySQL Web开发(原书第四版)
20. 《自营销:如何传递品牌好声音
21. 《营销革命 3.0
22. 《无价:洞悉大众心理玩转价格游戏
23. 《我读书少,你可别骗我
24. 《PHP精粹:编写高效PHP代码
25. 《人生的智慧

个人藏书

读书是一个好习惯,应该保持这个好习惯,记录2013年读过的书对自己起到一个督导的作用,今年阅读的技术类图书偏少,来年要增强,理想中应该是一半对一半,毕竟始终还是偏爱技术的。在阅读的过程中要加强笔记的记录与思考,要注重实践,不少书需要重新阅读,每一次阅读都会有不同的收获。

来年计划读的书有:

《什么是数学》
《时间的形状》
《失控》
《数学之美》
《大败局》
《信息简史》
《上帝掷骰子吗》
《我的栖身之所,我的人生目的》
《Linux Shell脚本攻略》
《Redis入门指南》
《… …》

其中《什么是数学》《时间的形状》《失控》目前正在阅读中,《什么是数学》与《失控》进展缓慢。在若干年以前,阅读的基本上都是单一技术类尤其是面向程序员的丛书,什么C/C++、VB、Delphi、数据库等等,其实并不是很好,有选择性拓宽范围的阅读反而会给技术方面提供很好的支持,在思考某些问题的时候会更加全面。

在即将到来的一年中,计划读的书主要包括基础科普类的图书、商业及企业管理类的图书、心理文学类和技术研发类,其中技术研发类图书偏向Web方向及移动方向。在阅读中拓宽自身的知识面,并学以致用。

《营销革命 3.0》阅读摘录

1、品牌故事:特征、情节、隐喻

某品牌成为解决社会问题或改变人们生活的某个运动象征时,该品牌就具备了很好的特征。

「趋势」–>「战略」–>「应用」

品牌应当承诺企业业务的不同寻常性,并为消费者提供文化层次上的满意度。好的品牌具有好的故事,好的故事情节有三种模式:「挑战」、「联系」、「创意」。

建立正确的品牌并生动传神的传播出去。

梅特卡夫定律:在一对一传播的情况下,一个有a名成员的网络效用 = a²。
里德定律:在一对多,多对多传播的情况下,一个有a名成员的网络效用= 2ª。

承诺变革、品牌故事和消费者参与。

2、营销3.0战略之一:向消费者营销企业使命

确定不同寻常的业务
寻找感人至深的故事
激发消费者的热情参与

提出具有变革性的使命;围绕使命构思品牌故事;引发消费者积极参与。注意能带来巨大改变的微小理念,宣传品牌使命就是讲述动人的故事,讲的故事是在隐喻的基础上建立故事特征和情节,故事必须真实可信,消费者增权。

「合作营销」、「文化营销」、「精神营销」

过去60年营销的演变:「产品管理」->「顾客管理」->「品牌管理」

产品管理: 『现在』4P理论(产品、价格、驱动、促销) -> 『未来』协同创新
顾客管理: 『现在』STP(市场细分、目标市场、定位)  -> 『未来』社区化
品牌管理: 『现在』品牌塑造    -> 『未来』特征塑造

3、营销3.0战略之二:向员工营销企业价值观

共享价值观、企业价值观是员工的共同行为,企业应建立起行为和价值观直接联系起来的机制,改变员工,员工改变其他人。

员工的分类

「应付差事型」 当一天和尚撞一天钟
「见风使舵型」 随大流,并不把工作放到第一位
「胆大冒险型」 把工作视为挑战自我的机会
「专业团队型」 寻找的是团队合作的工作机会
「步步高升型」 寻找的是有稳定发展前景的工作
「建功立业型」 能为企业带来永久影响和变化的机会

『麦肯锡』对员工类型的分类

「追随成功型」 希望实现个人成长和成就
「风险回报型」 希望获得最大化的薪金报酬
「随遇而安型」 看中的是灵活的工作方式
「宏伟目标型」 寻求的是为伟大使命努力奋斗的机会

理解员工才能更好的设计特征化体验,能清除与企业价值观背道而驰的员工,让员工更加团结。员工的特征化体验特征应具有合作性、文化性或创造性。

「闻之不若见,见之不若知,知之不若行」

企业向社区转变,在社区中为促进全体成员的共同利益,所有的决策都是通过投票产生的。

企业文化关乎道德和诚实,需要将共享价值观和员工共同行为紧密联系在一起。在世界互联,水平化营销等的影响下,企业文化应当具备合作性、文化性和创造性,应当改变员工的生活,同时鼓励员工改变他人生活。建立道德和诚实的形象,企业可以获得更大的人才竞争优势,可以提高生产率,改善消费者体验,成功管理内部差异。

向员工营销企业价值观与向消费者营销企业使命具有同等重要的意义。

4、营销3.0战略之三:向渠道合作伙伴营销企业价值观

利润增长点变化促使合作成为必然。

直销模式企业与消费者直接建立联系,保留了全部利润。直销模式会受到市场成熟,消费者选择目标增多等的影响,在某一时刻,利润点变化了,增加利润就需要寻找合作。

渠道合作伙伴是一个复杂的实体,是企业、消费者和员工的混合体。

「企业」 具有自己的使命、愿景、价值观和商业模式
「消费者」 有被满足的需求和期望
「员工」 向最终客户销售产品,和消费者沟通

渠道合作伙伴的管理:「目的」-> 「特性」 -> 「价值」

寻找渠道合作伙伴应选择与自己具备完全相同的目的、特性和价值的潜在目标。

合作双方应扪心自问是否想实现双赢的结果,良好的合作伙伴应该是水平化的而不是垂直化的,双方都应从中获得同等的利益回报;
合作的双方应认真审视,看对方是否强调质量标准;
合作双方应努力认清对方的价值观,看价值观是否吻合。

向合作伙伴营销价值观的第一步是要了解合作伙伴自身的价值观,企业之间的合作就像两人的婚姻行为:其目的、价值、特征一致。

渠道是企业的文化变革动力:分销企业理念
渠道是企业的创造性伙伴:管理关系

5、营销3.0战略之四:向股东营销企业愿景

成功的企业往往会变得骄傲,认为自己无所不能,因而转向疯狂增长,当危险的苗头初现时,他们毫不在意,直至失败的倾向越来越明显。如果仍不思悔改,最后只能走向破产。

注重可持续发展能力(市场两极分化,资源的稀缺)

对企业股东营销最重要的一点是要保证他们的投资回报。

提高成本产出率,利用新市场机遇提高销售收入以及提高企业品牌价值。

6、营销3.0应用实现社会文化变革

实现社会文化变革
创造新兴市场企业家
努力实现环境可持续发展

7、观点总结

热爱你的顾客,尊重你的竞争对手;
善于察觉变化,随时准备好作出变革;
捍卫你的品牌,永远明确自己的目标;
消费者千差万别,努力满足你的最佳客户;
永远以合适的价格和包装提供产品;
注重传播,努力寻找潜在消费者;
获取、维护和增加客户;
无论经营那种业务,记住你是在提供服务;
学会从质量、成本和交付三方面改善业务流程;
广集信息,慎下结论。

兼顾以人为本的精神和盈利经营。

PDO(PHP Data Object)扩展学习(一)

1、PDO知识学习
(1)了解PDO及建立数据库连接
PDO(PHP Data Object)扩展是一个与数据库通讯交互的扩展,与以往使用的mysql或mysqli类似,旨在解决不同数据库的连接及处理一致性问题,奈何在这个追求个性的时代,各个数据库厂家之间的SQL脚本都有自家的个性,有所差异,目前PDO还未完全解决针对所有数据库交互的一致性。
PDO针对数据库提供了一组相对比较简洁的功能,用于查询及获取数据集。其使用相对也比较简单,首先是一如既往的要跟将要操作的数据库取得联系,然后完成各种操作,与数据库取得联系,一般要创建一个PDO对象,然后核对暗号(DNS),匹配后该PDO对象就打入敌人内部,从而开展各项活动,该向外传递情报就传递,该破坏敌人内部就破坏。以MySQL为例我们来一个示例。

$dbConn = new PDO('mysql:host = localhost; dbname=db', 'dbuser', 'dbpwd');

创建成功后再$dbConn中存储PDO对象,然后就可以该干啥干啥了。
(2)基础查询
先看看基础查询,基础查询主要使用PDO对象的query方法,该方法接受SQL查询语句,返回一个叫PDOStatement的对象,返回的对象的fetch方法或者fetchAll方法就可以获得数据集了,具体如下:

$dbConn = new PDO('mysql:host = localhost; dbname=db', 'dbuser', 'dbpwd');
$stmt = $dbConn->query('SELECT Field1,Field2 FROM table_name');
while($row = $stmt->fetch()) {
    echo $row['field1'] . ' ---' $row['field2'] . "\n";
}

(3)数据提取模式
PDOStatement对象的fetch方法与fetchAll方法可接受相应的参数,该参数用于指定数据提取模式,主要反映在结果数据集格式化的模式,共有四个常量,分别是:FETCH_ASSOC、FETCH_NUM、FETCH_BOTH、FETCH_CLASS,其中FETCH_BOTH为默认值。
FETCH_ASSOC:返回的结果集为数组,以查询字段名作为数组的键值,上面的基础查询中输出中的应用;
FETCH_NUM:返回的结果集为数组,以数字作为数组的键值;
FETCH_BOTH:返回的结果集为数组,包含上两者,既有以字段名作为数组的键值,又有以数字作为数组的键值;
FETCH_CLASS:返回的结果集为一个已经命名的类的对象,以查询列名设置到类对象的属性中;
(4)参数及预处理
PDO扩展还可以对查询脚本参数进行预处理操作,可以在SQL语句中针对查询条件设定参数,可以在执行过程中给参数设定具体的值,等于说将PDOStatement对象的Query分为两步来运行,先传入预处理SQL语句,然后再赋值执行。使用预处理的好处是编译一次,多次执行,能够提高效率,要快于query查询,另外可以有效的防止SQL注入。另外参数也可以用?来代替,需要顺序给参数赋值。预处理还中的参数可以绑定一个值,也可以绑定一个变量。

// 基本操作
$sql = "SELECT * FROM tablename WHERE field = :param";
$stmt = $dbConn->prepare($sql);
$stmt->execute(array("field" => value));
$result = $stmt->fetch();
// 用?代替参数
$sql = "SELECT * FROM tablename WHERE field1 = ? AND field2 = ?";
$stmt = $dbConn->prepare($sql);
$stmt->execute(array(value1,value2));
$result = $stmt->fetch();
// 绑定值、预处理中的变量
$sql = "SELECT * FROM tablename WHERE field1 = :field1 AND field2 = :field2;
$stmt = $dbConn->prepare($sql);
$stmt->bindValue(':field1', value1);
$stmt->bindValue(':field2', value2);
$stmt->execute();
$result = $stmt->fetch();
// 可改变某一参数绑定的值,继续执行
$stmt->bindValue(':field2', value3);
$stmt->execute();
$result2 = $stmt->fetch();
// 还可以给参数绑定变量
$stmt->bindParam(':field2',$value4);
$value4 = value;
$stmt->execute();
$result3 = $stmt->fetch();

(6)数据库操作中的常用操作
(A)获取新插入数据的ID
执行后调用PDO对象的lastInsertId()方法可获得新插入数据的ID。

$sql = "INSERT INTO tablename(field1,field2,field3) VALUES(:field,:field2,:field3)";
$stmt = $dbConn->prepare($sql);
$stmt->execute(array(
        ':field1' => value1,
        ':field2' => value2,
        ':field3' => value3)
);
echo "New insert id : " . $dbConn->lastInsertId();  

(B)获取操作影响的行数
执行后调用PDOStatement对象的rowCount方法获得操作影响到行数,参考数据删除操作影响的行数。
(C)数据删除

$sql = "DELETE FROM tablename WHERE field = :field";
$stmt = $dbConn->prepare($sql);
$stmt->execute(array(":field" => value));
echo $stmt->rowCount() . ' rows deleted';

(7)异常处理
连接数据库失败会抛出PDOException异常,预处理失败会返回false或抛出PDOException,可使用getMessage方法获得抛出异常的原因,执行成功返回true,失败返回false,如果执行失败,可使用PDOStatement对象的errorInfo方法获得错误产生的原因。提取数据错误返回false,同样可以使用errorInfo方法获得错误的信息,需要注意的是提取数据会返回空数组或者其他 依据数据提取模式结果,这是没有错误状态的。

        try {
              $dbConn = new PDO("...");
        } catch (PDOException $e) {
              echo "Could not connect to database";
              exit;        
        }
        $sql = "...";
        try {
              $stmt = $dbConn->prepare($sql);
              if($stmt) {
                   if($stmt->execute(...)) {
                       $result = $stmt->fetch();
                   } else {
                       $error = $stmt->errorInfo();
                       ...
                   }
              }
        } catch(PDOException $e) {
            echo $e->getMessage();
        }

(8)PDO的事务处理
PDO对于事物处理的前提是数据库要支持事务处理,对于MySQL来讲表类型为Inno的支持事务,对于一组SQL语句需要进行事务处理,在任何SQL语句运行前调用PDO对象的beginTransaction方法启动事务,所有SQL语句运行成功后,调用PDO对象的commit方法,在运行中改组SQL语句有一个没运行成功,调用PDO对象的rollback方法回滚。

–未完待续 —