【发布时间】:2014-06-13 04:37:35
【问题描述】:
当我的查询有效但尝试保存 provider_id 时,我在数据库中得到一个不同的数字。
字段的类型是INT。除非我尝试将字段类型更改为VARCHAR,否则它不起作用(不同的数字)
/* prepare query */
$query = 'INSERT INTO `users`(`first_name`,
`last_name`,
`gender`,
`username`,
`profile_picture`,
`provider`,
`provider_id`,
`provider_username`,
`provider_profile`,
`last_login`,
`created_date`,
`ip_address`)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW(), INET_ATON(?))';
/* Prepare an insert statement */
$stmt = $mysqli->prepare($query);
if($stmt){
$stmt->bind_param("ssssssisss", $user['first_name'],
$user['last_name'],
$user['gender'],
$user['username'],
$user['link'],
$user['provider'],
$user['id'],
$user['username'],
$user['link'],
$_SERVER['REMOTE_ADDR']);
如果我错了,请纠正我,尽管保存为 INT 是一个更好的主意
我得到一个奇怪的负数:
-502711531
【问题讨论】:
-
尝试使用
intval($user['id'])而不是只使用$user['id']并告诉我结果 -
您尝试插入的实际 ID 值是多少?
-
它是来自 facebook 用户会话 @user2864740 的 id
-
@jenny 那么,是的价值是多少?将其包含在帖子中。
-
@jenny (2147483647) 是 MySQL INT 字段的最大大小。当使用
i时,转换发生在in PHP(实际上是(int)ID并溢出),而s它发生在in MySQL 中,它只是“被封顶” "但没有溢出。如果您在 MySQL 中使用s切换到 BIGINT,那么它应该可以工作。但是,为避免类似(意外)转换问题,请考虑使用 CHAR 字段。
标签: php mysql mysqli insert prepared-statement