Php 功能有时只起作用

Php 功能有时只起作用,php,mysql,pdo,Php,Mysql,Pdo,因此,我有一个函数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

因此,我有一个函数
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())");
}

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

首先,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中选择INET\u NTOA(IP)作为IP…

确保$username或$action中没有引号,因为这将中断查询。另外,我建议使用PDO或类似的东西,这会使任何引号都不相关。

插入时不需要字段名,但最好明确指定它们。同意,因此通常使用关键字。不需要它们的事实是否不够清楚?我应该更新这些措辞吗?“缺失”这个词让我觉得你的意思是需要它们,但你的回答仍然很好+1用于sql IP转换。我让查询在登录之外工作,我添加了一个ID作为主键。有更好的方法吗?如果你还没有,自动增加你的ID字段,你就可以开始了。不过,我建议您阅读SQL注入,并将代码移动到
mysqli
pdo
,如果还没有的话。您是否打开了MySQL日志记录?如果是,请张贴最后一个条目。这应该对正在发生的事情有一个很好的了解。