php数据入库前清理——注意php intval与mysql的int取值范围不同

php保存数据到mysql

打算在dao层进行数据入库前的清理,比如varchar进行trim,int进行intval。

有一天突然想起,php intval的取值范围与mysql的int类型一样吗?

查了一下,不一样……

http://php.net/manual/en/function.intval.php

http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#numeric-types

php intval的取值范围:与操作系统相关,32位系统上为-2147483648到2147483647,64位系统上为-9223372036854775808到9223372036854775807。

mysql int取值范围:与操作系统无关,为-2147483648到2147483647,无符号为0到4294967295。

mysql bigint取值范围:与操作系统无关,为-9223372036854775808到9223372036854775807,无符号为0到18446744073709551615。

所以下面的代码是错误的:

public function insert($data)
{
if(isset($data['content'])&&!empty($data['content']))
{
$data_for_query['content'] = trim($data['content']);
}
else
{
return false;
}
if(isset($data['user_id'])&&!empty($data['user_id']))
{
$data_for_query['user_id'] = intval($data['user_id']);
}
else
{
return false;
}

$sql = "INSERT INTO `".$this->table_name."` (".$this->db->implodeToColumn(array_keys($data_for_query)).") VALUES (".$this->db->implodeToValues(array_values($data_for_query)).")";
$this->db->query($sql);
$id = $this->db->lastInsertId();
if(empty($id))
{
return false;
}
else
{
return $id;
}
}

解决办法:还在想,准备用正则表达式。

posted @   sink_cup  阅读(2973)  评论(1编辑  收藏  举报
编辑推荐:
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
阅读排行:
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
· Vite CVE-2025-30208 安全漏洞
Creative Commons License

本站原创作品采用知识共享署名 3.0许可协议进行许可。

点击右上角即可分享
微信分享提示