[英]php mysql updating IP address cannot work right
该代码用于更新用户登录的IP地址。当我打印$ sql字符串时,似乎是正确的,IP地址为1886883852,但是更新为mysql后,值为2149463110。我尝试设置mysql中的数据类型为INT(11)bigint(12),都相同。 如果我尝试将字符串写为
UPDATE ddns SET LastIP=1886883852, LastUpdate=now() WHERE ID=1
直接使用而不使用任何变量,它可以正常工作。
真的无法理解。 有人可以帮忙吗?
//get dns
function getIP(){
//check the current ip address registered
//Test if it is a shared client
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
$ipaddr=$_SERVER['HTTP_CLIENT_IP'];
//Is it a proxy address
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ipaddr=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ipaddr=$_SERVER['REMOTE_ADDR'];
}
$ipaddr = ip2long($ipaddr);
return $ipaddr;
}
$ipaddr = getIP();
$sql = "UPDATE ddns SET LastIP=$ipaddr, LastUpdate=now() WHERE ID=1";
echo $sql; **//here UPDATE ddns SET LastIP=1886883852, LastUpdate=now() WHERE ID=1**
$result = mysqli_query($dbh,$sql) or die("Query failed:");
**//Here after updated, the value of ipaddr in database is 2149463110**
if ($result)
echo "Update ddns successfully";
else
echo "faild to update ddns";
您是否尝试过这种方式:
$sql = "UPDATE ddns SET LastIP='$ipaddr', LastUpdate=now() WHERE ID=1";
IP地址似乎是一个字符串,因此需要用引号引起来。 或者,您可以var_dump $ _SERVER超全局变量以检查字段类型。 或超出内存限制。
仅针对测试用例,您可以将字段类型更改为float,varchar甚至是text。
最后我找到了原因。 当我使用Chrome浏览和更新时,数据库将写2149463110,当我使用firefox或safari时 ,结果将是1886883852。有什么解释吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.