自上次新手村外白如意被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行
这就实现了插入操作,其他数据库操作应该可以举一反三
一门语言的原力来源于自身,这样代码可能会有灵魂
完
少侠有缘再见还请留赞
领取专属 10元无门槛券
私享最新 技术干货