在批量插入一组数据的时候,总是提示以下错误

Insert value list does not match column list:  Column count doesn't match value count at row 1

核对了半天数据库的字段和插入的数据,发现真没问题。

然后我把要执行的sql打印出来后发现valus部分少一个字段。

然后根据提示和方法逆向查看代码发现了问题:

mysql.class.php文件的insertAll方法存在缺陷

第120行开始:

foreach ($data as $key=>$val){
if(is_array($val) && 'exp' == $val[]){
$value[] = $val[];
}elseif(is_scalar($val)){
if(===strpos($val,':') && in_array($val,array_keys($this->bind))){
$value[] = $this->parseValue($val);
}else{
$name = count($this->bind);
$value[] = ':'.$name;
$this->bindParam($name,$val);
}
}
}

这里只判断了is_array和is_scalar,然后is_array比较常用,没啥问题,is_scalar的意思是判断是否是一个“标量”,然后null并不是标量,所以被跳过去了,当批量插入的时候有null则会少一个字段。所以出现文头的错误提示。

改正方法很多,比如我直接加了一个is_null判断,修改后的代码为

foreach ($data as $key=>$val){
if(is_array($val) && 'exp' == $val[]){
$value[] = $val[];
}elseif(is_scalar($val) || is_null($val)){
if(===strpos($val,':') && in_array($val,array_keys($this->bind))){
$value[] = $this->parseValue($val);
}else{
$name = count($this->bind);
$value[] = ':'.$name;
$this->bindParam($name,$val);
}
}
}

然后就一切正常了!我用的是3.2.3,其他版本没测试!

最新文章

  1. JavaScript: 零基础轻松学闭包
  2. cocos2d-x3.2创建新项目失败的一种可能性(cygwin自带的python2.6被抢先执行)
  3. 用node开发repl应用
  4. LightOJ1125 Divisible Group Sums(DP)
  5. python Django 学习笔记(三)—— 模版的使用
  6. Xcode快照——管理应用程序版本
  7. CSS中nth-child和nth-of-type的简单使用
  8. Java-Android 之动画的实现
  9. 解决Timer回调方法重复调用的问题
  10. java中的各种数据类型在内存中存储的方式
  11. Dagoin之modelform组件
  12. tomcat配置文件及性能优化
  13. Python常用模块:datetime
  14. rabbitMQ 在 windows 64位环境下无法启动(提示乱码)的解决方法
  15. (网页)Http状态码大全(200、404、500等)(转CSDN)
  16. Linter pylint is not installed
  17. 51nod1185 威佐夫游戏 V2 (模拟乘法)
  18. win10安装PS和AI后报代码为16的错误解决方法
  19. vue element-ui怎样提炼一个自己写的js当作公共js
  20. 2018.10.16 NOIP模拟 长者(主席树+hash)

热门文章

  1. (转) 一致性Hash算法在Memcached中的应用
  2. iOS-----线程同步与线程通信
  3. ubuntu自带截图工具gnome-screenshot
  4. Codeforces 989A:A Blend of Springtime
  5. MD文件
  6. DCI改进,发布后作业乱码不能打开
  7. sourcetree 出现忽然分支消失,git文件变乱
  8. 转转转-精通js正则表达式
  9. mac电脑安装selenium 记录
  10. postman-2get发送请求