php 데 이 터 를 입고 하기 전에 php intval 과 mysql 의 int 수치 범위 가 다 릅 니 다

1778 단어
php 데 이 터 를 my sql 에 저장 합 니 다.
dao 층 에서 데이터 입고 전 청 소 를 할 계획 입 니 다. 예 를 들 어 varchar 에서 trim, int 에서 intval 을 진행 할 계획 입 니 다.
어느 날 갑자기 phop intval 의 수치 범위 가 my sql 의 int 형식 과 같 습 니까?
알 아 봤 는데 달라..
http://php.net/manual/en/function.intval.php
http://dev.mysql.com/doc/refman/5.1/zh/column-types.html#numeric-types
pp intval 의 수치 범위: 운영 체제 와 관련 되 고 32 비트 시스템 은 - 2147483648 에서 21474833647 이 며 64 비트 시스템 은 - 922337203654775808 에서 92233736854775807 이다.
my sql int 수치 범위: 운영 체제 와 상 관 없 이 - 2147483648 에서 21474833647 이 고 기호 가 없 으 면 0 에서 4294967295 입 니 다.
my sql bigint 수치 범위: 운영 체제 와 상 관 없 이 - 922337203685475808 에서 92233736854775807 까지 기호 가 없 으 면 0 에서 1844674407379551615 이다.
그래서 아래 코드 가 잘못 되 었 습 니 다.
 
  
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;
}
}

해결 방법: 정규 표현 식 을 사용 할 생각 입 니 다.

좋은 웹페이지 즐겨찾기