数据库中是 unsigned int, 支持40多亿, 但用tp进行查询的时候, where方法会自动把大于2147483647的(有符号int最大值) 转化成 2147483647
print_r($condition);
$Mode->where($condition)->find();
echo $Mode->getlastSql();
结果:
Array
(
[sid] => 2147645095
[type] => icili
)
SELECT * FROM `al_qitadianying` WHERE ( `sid` = 2147483647 ) AND ( `type` = 'icili' ) LIMIT 1
sid 字段是 unsigned in
---------------------------------------------
下面是我自己的测试结果
我测试了,
$data['userID'] = "davidhuang";
$data['sysID'] = 2147645095;
$data['loginTime'] = datetime();
$data['loginStatus'] = 0;
$data['validStatus'] = 0;
$result = M("loginLog")->add($data);
dump(M()->getLastSql());
生成的sql是
INSERT INTO `login_log` (`userID`,`sysID`,`loginTime`,`loginStatus`,`validStatus`) VALUES ('davidhuang',-2147322201,'2013-11-19 09:58:44',0,0)
sysID的类型是
int(11) UNSIGNED
应该是个bug。
测试TP版本 3.1.3
看下tp的源码:
/**
* 数据类型检测
* access protected
* @param mixed $data 数据
* @param string $key 字段名
* return void
*/
protected function _parseType(&$data,$key) {
$fieldType = strtolower($this->fields['_type'][$key]);
if(false !== strpos($fieldType,'int')) {
$data[$key] = intval($data[$key]);
}elseif(false !== strpos($fieldType,'float') || false !== strpos($fieldType,'double')){
$data[$key] = floatval($data[$key]);
}elseif(false !== strpos($fieldType,'bool')){
$data[$key] = (bool)$data[$key];
}
}
它用的是intval,转换后的最大值是2147483647。
API说明:
intval($var, $base)
Get the integer value of a variable
link http://www.php.net/manual/en/function.intval.php
@param var mixed
The scalar value being converted to an integer
@param base int[optional]
The base for the conversion
return int The integer value of var on success, or 0 on failure. Empty arrays and objects return 0, non-empty arrays and objects return 1.
The maximum value depends on the system. 32 bit systems have a maximum signed integer range of -2147483648 to 2147483647. So for example on such a system, intval('1000000000000') will return 2147483647. The maximum signed integer value for 64 bit systems is 9223372036854775807.
Strings will most likely return 0 although this depends on the leftmost characters of the string. The common rules of integer casting apply.
分享到:
相关推荐
PHP安装ZBarCodeImage插件,实现识别二维码功能。thinkphp5.0识别二维码,php实现识别二维码功能。,php二维码识别功能。
最近研究PHP, 发现在THINKPHP不错, 但是想用THINKPHP连接SQLSERVER数据库,才到这个文件,希望对大家有用
THINKPHP连接SQLSERVER数据库,将会需要这个文件和工具
工作需要用到php5.5连sqlserver 2008 R2,发现最新版的php内置已经不支持mssql 了,需要用到sqlsrv。 微软提供了Microsoft Drivers for PHP for SQL Server。
ThinkPHP学习笔记(五)关联的SQL文件
thinkPHP调用枚举类型,里面根据参数不同返回值不同,初步只封装了input(radio、check)、td、select等。
ThinkPHP数据操作指南ThinkPHP数据操作指南ThinkPHP数据操作指南ThinkPHP数据操作指南ThinkPHP数据操作指南ThinkPHP数据操作指南
以下小编给大家列出了三种实现thinkphp批量更新数据的方法,写的不好还请见谅,有意见欢迎提出,共同学习进步! 方法一: //批量修改 data二维数组 field关键字段 参考ci 批量修改函数 传参方式 function batch_...
主要介绍了thinkPHP框架中执行原生SQL语句的方法,结合实例形式分析了thinkPHP中执行原生SQL语句的相关操作技巧,并简单分析了query与execute方法的使用区别,需要的朋友可以参考下
Thinkphp3.0 + SqlServer 2005 本人由于最近项目中使用的数据库是Sql 2005的,经过测算官方的无法正常使用,所以,我就重新写了 底层的数据库抽象层。 php 5.2.6版本以下,可以用php官方的接口连接数据库,无需...
需要连接sqlservice,一直连接不上,终于找到个可以用的,亲测没有问题可以用的,希望能帮到大家
thinkPHP5.0完全开发手册 chm类型
本文实例讲述了ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作。分享给大家供大家参考,具体如下: ThinkPHP中获取最后一次执行sql语句的 方法有两种: 其一是 调用模型 获取 如: $sql = $model ->...
Thinkphp执行流程 Thinkphp执行流程 Thinkphp执行流程
使用Thinkphp实现不同类型数据库之间的切换,即mysql与sqlserv的数据转换。由于本人有用到这个,在网上和官网上查到都是同种数据库的连接方法,因此附上本人的代码片段,仅供参考!如有侵权请告知!
thinkphp3.2整合PHPExcel 数据导入导出完整示例(导入数据并插入数据库,充数据库导出数据到excel表格,包括数据库和源码)
thinkPHP3.2.3使用Cron实现网站访问执行任务。
ThinkPHP 5.0 远程代码执行漏洞分析
thinkphp漏洞检测工具
适合TP初学者下载参考,我也是新手,拿上来分享下,老鸟请勿喷。