php特性与mysqli融合铸造数据库插入之剑

自上次新手村外白如意被mysql狠狠教训,内心一想起数据库竟有点发怵。只听信无望山php掌门之意,潜心修炼内功心法,数日后顿悟原力。

——《编程话江湖,原力铸神兵》

php5.6引入前置... 操作符,使得函数参数个数具有弹性

mysql4.1引入预处理语句,为执行做好准备,带来了占位符?,也能有效防止SQL注入攻击。现在有一个Student表,在数据中查看表结构

主键为id整型自动+1,其中姓名name 和级别grade为字符串类型。让我们看看插入语句的写法

注意,字段个数增加,相应的参数也在增加,后面将运用这一点

php通过mysqli扩展实现预处理语句,也是执行插入语句

用?进行了预处理语句占了坑,后面需要绑定相应的数据,并在这之前指明数据类型,php支持提供i、d、s、b四种对应参数类型,这四个类型是从php的角度看待的

当我们需要插入需要增加一个age,上方的代码必须人为修改

当插入字段有多少,代码就会有多长。

很快,白如易从中发现了要害——

白如易悟到,对于任何一张邪恶的mysql数据表,它的表字段和结构可以认为是不变的。当我们插入数据时,只须数据表已存在字段相同则切中要害,字段变则参数变,字段长则参数长,步调一致,万变不离其宗。

总体脉络

第一步,获取数据库操作句柄变量

php中的mysqli扩展提供连接数据库功能,有面向过程和面向对象两种写法,更推荐使用面向对象的写法,变量自定义命名为$mysqli

第二步,创建添加方法

自定义名称为add。根据输入数据,从中获取能够进入数据库的有效数据,并且根据有效数据为其组织相应的参数类型列表、和组装预处理SQL。

其中,$dataArr 数组包含三个元素:

获取上面三个元素的函数我们命名为filterFromTable()。这个函数肩负起上方所有的职责,首先要获取数据库表字段列表和其i、d、s、b类型,接着循环数据库列表字段或插入数据,比对找出其中登记在库的参数重组数据,并且在循环时可顺便拼接 好SQL语句的字段列表和问号列表

其中,fieldTypeArr()用来获取数据库字段对应i、d、s、b类型,需要根据mysql字段类型做一个转换,该函数返回内容为

上述函数根据mysql字段类型,转换为i、d、s、b类型用到的自定义函数oneFieldType

第三步,测试

以Student表为例引入myDB.class.php类,将适用于任何表的插入操作

执行过程的中间返回值

函数调用关系

完整的代码

包括注释和辅助函数,共计107行

这就实现了插入操作,其他数据库操作应该可以举一反三

一门语言的原力来源于自身,这样代码可能会有灵魂

少侠有缘再见还请留赞

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180312G1RZQ800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券