【问题标题】:php mysql updating IP address cannot work rightphp mysql更新IP地址无法正常工作
【发布时间】:2013-04-07 17:10:37
【问题描述】:

该代码用于更新用户登录的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";

【问题讨论】:

  • 为什么要插入变量而不是使用准备好的语句?这不是 mysqli 优于 mysql 的主要好处之一吗?
  • 无论我如何处理这个问题,它都不应该发生。我唯一能想到的改变就是改用@Barmar 建议的准备好的声明。
  • 谢谢两位。准备好的语句似乎与 mysqli 有问题。我从 vi 更改编辑器后问题解决了。很奇怪。

标签: php mysql ip


【解决方案1】:

你有没有这样尝试过:

$sql = "UPDATE ddns SET LastIP='$ipaddr', LastUpdate=now() WHERE ID=1";

IP 地址似乎是一个字符串,因此需要用引号引起来。或者您可以 var_dump 超全局 $_SERVER 以检查字段类型。或者超出内存的限制。

仅针对测试用例,您可以将字段类型更改为 float、varchar 甚至 text。

【讨论】:

  • LastIP 是 int,而不是 string。其实一开始我用的是字符串,也很奇怪,同样的问题。打印 $sql 时,它是正确的,有我的 IP。但是更新后是另一个IP,在字符串中。
  • 我非常没有想法,但我仍然有一些想法。我看到您总是在更新 ID=1。因此,任何可以访问您的应用程序的人都将使用其 IP 进行更新。所以,也许,你有一个机器人,它会不断地访问你的应用程序并为 ID=1 重新更新你的 IP。如果您已将应用程序上传到主机,也可以是内部机器人。
【解决方案2】:

终于找到原因了。当我使用Chrome访问更新时,数据库会写入2149463110,当我使用firefox或safari时,结果会是1886883852。 有什么解释吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    相关资源
    最近更新 更多