博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
***codeigniter 2.2 affected_rows()返回值不准确
阅读量:5905 次
发布时间:2019-06-19

本文共 1160 字,大约阅读时间需要 3 分钟。

http://blog.icodeu.com/?p=596

问题描述

今天在完成一个项目调用想要检验一下计划插入的数据是否都正常插入了。调用insert_batch()方法插入一百多条数据的时候发现affected_rows()返回值不准确。
问题分析
1.第一步打印last_query()发现插入的数据和affected_rows()数值确实是一样的
2.检查数据库,发现需要插入的一百多条数据也确实正常插入了
3.查看了一下代码,才知道在insert_batch()和update_batch()的时候,如果数据量大于100条,将会分多次插入,每次最多只会插入一百条。
详见下面的代码

1
2
3
4
5
6
// Batch this baby
for
(
$i
= 0,
$total
=
count
(
$this
->ar_set);
$i
<
$total
;
$i
=
$i
+ 100)
{
    
$sql
=
$this
->_update_batch(
$this
->_protect_identifiers(
$table
, TRUE, NULL, FALSE),
array_slice
(
$this
->ar_set,
$i
, 100),
$this
->_protect_identifiers(
$index
),
$this
->ar_where);
    
$this
->query(
$sql
);
}

影响范围

insert_batch(),update_batch()
解决方案
对插入的数据进行求余然后和affected_rows()进行对比检验插入数据是否正确

github上官方已经修复了这个问题

https://github.com/bcit-ci/CodeIgniter/tree/2.2-stable

 
 
1
2
3
4
5
6
7
    
// Batch this baby
$affected_rows
= 0;
for
(
$i
= 0,
$total
=
count
(
$this
->qb_set);
$i
<
$total
;
$i
+= 100)
{
$this
->query(
$this
->_insert_batch(
$this
->protect_identifiers(
$table
, TRUE, NULL, FALSE),
$this
->qb_keys,
array_slice
(
$this
->qb_set,
$i
, 100)));
$affected_rows
+=
$this
->affected_rows();
}

转载于:https://www.cnblogs.com/kenshinobiy/p/4826288.html

你可能感兴趣的文章
windows server2012部署apache项目访问后台管理系统时tomcat就停了是怎么回事
查看>>
viewpager切换耗时控制
查看>>
Java的三种代理模式
查看>>
(转)log4j(七)——log4j.xml简单配置样例说明
查看>>
labview程序性能优化
查看>>
Spark调研笔记第6篇 - Spark编程实战FAQ
查看>>
8.5 filecmp--文件和文件夹比較处理
查看>>
IE6下position:fixed不支持问题及其解决方式
查看>>
iOS Animation具体解释
查看>>
Selenium:集成测试报告
查看>>
<html>
查看>>
关于虚析构函数的作用和使用
查看>>
[Angular] Custom directive Form validator
查看>>
密码子优化--转载
查看>>
英特尔 QSV 在 FFMPEG 中的使用(Windows)
查看>>
深入理解计算机系统(2.2)------进制间的转换原理
查看>>
Linux下 网卡测速
查看>>
改善C#程序的建议5:引用类型赋值为null与加速垃圾回收
查看>>
Github如何回退/回滚到某个版本
查看>>
Ubuntu Linux 与 Windows 7双系统安装教程(图文)
查看>>