1

这是我的 sql 代码,我多次运行相同的代码并且从未遇到任何问题,但今天或某些原因。

mysqli_query($con, "
    INSERT INTO 'u_visits'
        ('ip_adress','dates')
    VALUES
        ('$ip',now())
    ON DUPLICATE KEY UPDATE visits = visits + 1
");
mysqli_close($con);

一切正常,除了我的日期行被添加为 0000-00-00 00:00:00

这是我获取IP地址的方法:

//Test if it is a shared client
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ip = $_SERVER['HTTP_CLIENT_IP'];
    //Is it a proxy address
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ip = $_SERVER['REMOTE_ADDR'];
}

$ip = ip2long($ip);
4

2 回答 2

0

尝试显式设置:

  INSERT INTO 'u_visits' SET ip_adress = '$ip', dates=NOW() ON ...

另外,正如其他人提到的,绝对确保 $ip 已正确检查,否则您将遭受 SQL 注入攻击。

于 2013-09-01T00:10:28.323 回答
0

怎么样:

INSERT INTO `u_visits` (`ip_address`,`dates`) 
VALUES (
        '$ip', CONCAT(CURDATE(), ' ', CURTIME() )
       )
       ON DUPLICATE KEY UPDATE visits = visits +1

您应该查看绑定参数以防止正确的 SQL 注入,因为您现在是完全开放的。

就个人而言,我认为您的查询失败是因为您使用字符串困境'而不是使用反引号(`)将表名/列名分配为表。因此 MySQL 可能会尝试将必要的名称迭代为字符串而不是表名/列

于 2013-09-01T00:09:33.567 回答