2

所以我有这个功能add_log

function add_log($username, $action) {
    $l_con = new con(); 
    $log_action = $l_con->connect(); 

    // IP to put in database 
    $ip_orig = $this->getIP(); 
    $newa_ip = ip2long($ip_orig);

    $prepara = $log_action->query("INSERT INTO log VALUES ('$username',
        '$action', '$newa_ip', CURDATE(), NOW())");
}

当我在我的注册表单中使用它时,它可以完美地工作并插入数据库。但是在登录脚本或其他任何地方它都不起作用。我什至尝试使用我确信我没有使用的奇怪名称。我尝试在登录脚本之外使用它,但仍然没有。

4

2 回答 2

1

首先,您在 SQL 语句中缺少可选的列声明。通常你会将它们定义为:

INSERT INTO table (COLUMN1, COLUMN2, COLUMNN) VALUES ('a', 'b', 'n...');

此外,当使用 时ip2long,请注意还有一种替代方法,您可以直接在 SQL 语句中执行此操作:

INSERT INTO log VALUES ('$username', '$action', INET_ATON('$new_ip'), CURDATE(), NOW())

要检索,您可以执行long2ip或在您的 SQL 中,SELECT INET_NTOA(IP) as IP ...

于 2012-07-22T02:44:54.360 回答
0

确保 $username 或 $action 中没有引号,因为它会破坏查询。另外,我建议使用 PDO 或类似的东西,它会使任何引用变得无关紧要。

于 2012-07-22T03:10:04.930 回答