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

yipeiwu_com4年前Mysql基础
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
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;
}
}

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

相关文章

PHP实现mysqli批量执行多条语句的方法示例

本文实例讲述了PHP实现mysqli批量执行多条语句的方法。分享给大家供大家参考,具体如下: 可以一次性的执行多个操作或取回多个结果集。 实例: <?php $mysq...

mysqli扩展无法在PHP7下升级问题的解决

mysqli扩展无法在PHP7下升级问题的解决

前言 这几天在想部署一个OAuth服务,找了一个PHP的开源实现,由于要求的PHP版本比较高,就打算在自己的ECS上(PHP7.1)先测试下,没想到遇到了一些问题。 首先发现mysqli...

PHP同时连接多个mysql数据库示例代码

实例: 复制代码 代码如下: <?php $conn1 = mysql_connect("127.0.0.1", "root","root","db1"); mysql_selec...

PHP+MySql+jQuery实现的"顶"和"踩"投票功能

本文实例为大家分享了基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码,供大家参考,具体内容如下 数据库操作: CREATE TABLE IF NOT EXISTS `vo...

php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置

php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置

php环境的配置,对于新手来说,绝对是一件烦事。总会遇到这样那样的问题,走很多弯路。所以今天特意写了这个配置文档,相信按照以下步骤你一定会成功的。错误的地方也希望各位指正。 更多文章 p...