mysqli中多语句查询insert_id和affected_rows

在php的mysqli中有多条SQL语句执行的函数multi_query,可以一次执行多条SQL语句,对于不返回结果集的SQL语句在使用中发现获取insert_id和affected_rows不能自动进行多语句的累加数据,还得配合more_results「是否还有结果集」和next_result「下一个结果集」来进行计算,按照预计的来讲对于不返回结果集的SQL语句来说,应该能直接返回最后插入的ID和受影响的行数,结果却不然,在此记录一下。

<!--?php
/*
 *  使用mysqli的多语句查询multi_query中获得最后插入ID和受影响的行数
 *  数据库表为shops,字段有id,name,price,nums,desc,id为子增长字段
 */
header('Content-Type: text/html; charset=utf-8');

$mysqli = new mysqli("localhost", "root", "liutao", "test");

if($mysqli--->connect_error) {
  echo '错误:' . $mysqli-&gt;connect_error;
  exit;
}

$sqls = "insert into shops(name,price,nums,desc) 
  values('笔记本','1.2','1000','B5 笔记本');
insert into shops(name,price,nums,desc) 
  values('0.5中性笔','1.8','30','0.5的黑色中性笔');
insert into shops(name,price,nums,desc) 
  values('档案袋','2.2','100','A4透明塑料档案袋');
insert into shops(name,price,nums,desc) 
  values('订书钉','3.5','50','订书钉');";

if($mysqli-&gt;multi_query($sqls)) {
  $affectRows = 1; 
  do {
    $affectRows += $mysqli-&gt;affected_rows;
    $mysqli-&gt;next_result();
  } while($mysqli-&gt;more_results());
  echo "执行成功!<br> 最后插入的id:{$mysqli-&gt;insert_id} <br> ";
  echo "共影响的行数:{$affectRows} <br>";
} else {
  echo '错误:' . $mysqli-&gt;errno . '(' . $mysqli-&gt;error . ')';
}

$mysqli-&gt;close();

?&gt;

执行结果:

mutiquery_id_affectedrows

常见的腻子脚本功能摘要

经常见到一些网站中用一些腻子脚本「polyfill」,对其主要的功能进行一下摘要记录。

html5shiv.js  让IE8及更低版本的IE浏览器识别section、article、nav等HTML5元素;
selectivizr 让IE6/7/8 支持:first-child 等CSS选择符;
CSS3Pie 让低版本的IE支持圆角、渐变、边框图片、阴影等可视化CSS3功能;
Respond.js 让旧浏览器支持媒体查询;
-prefix-free 为需要厂商前缀的CSS3声明增加前缀;
borderBoxModel.js 让IE6/7支持CSS3的box-sizing属性;

这些腻子脚本主要用于弥补IE及低版本浏览器的不足,在GitHub有一个腻子脚本列表,参见「这里」。

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方向及移动方向。在阅读中拓宽自身的知识面,并学以致用。