Php 日期时间保存为0000-00-00:00:00

Php 日期时间保存为0000-00-00:00:00,php,mysql,database,Php,Mysql,Database,这是我的sql代码我已经运行了很多次同样的代码,从来没有遇到过任何问题,但今天或出于某种原因,它是 mysqli_query($con, " INSERT INTO 'u_visits' ('ip_adress','dates') VALUES ('$ip',now()) ON DUPLICATE KEY UPDATE visits = visits + 1 "); mysqli_close($con); 除了“我的日期”行被添加为000

这是我的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之外,一切都正常

以下是我获取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);

比如说:

INSERT INTO `u_visits` (`ip_address`,`dates`) 
VALUES (
        '$ip', CONCAT(CURDATE(), ' ', CURTIME() )
       )
       ON DUPLICATE KEY UPDATE visits = visits +1
您应该研究绑定参数,以正确地防止SQL注入,因为您是完全开放的


就我个人而言,我认为您的查询失败了,因为您使用了字符串dilemas,而不是使用backticks`将表名/列名指定为表。因此,MySQL可能会尝试以字符串形式迭代必要的名称,而不是表名/列

尝试显式设置:

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

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

您的表结构是什么?@FreshPrinceOfSO id、ip地址、访问、日期这些是您的列。数据类型会很有帮助。您的表模式是什么?i、 e:日期字段是什么类型的?请使用此信息更新您的问题。这可能有效,但您应该解释为什么现在无效。它仍在插入除实际日期和日期之外的所有零time@RodrigoLessa不适用于新行或更新?或者两者都有?@Mike ip Address和id被插入,但datetime只是一堆零,其他一切都不能回答我的问题Google sql注入攻击,你会得到很多关于这个问题的信息:在这种情况下,他实际上是在用ip2long清理它,但一般来说,你应该使用准备好的语句。