2013-02-21 68 views
0

当有人访问我的网站时,我想记录用户的IP,但是当你到达站点时表可能不存在,所以UPDATE查询给我一个错误。我还需要检查现有的表格。我试过:阅读,但似乎没有涵盖这个问题,如果表不存在。 这可能是一个错字。哪里不存在mysql

$db->query("INSERT INTO track (tm, user_agent, host, ip, port, lang) VALUES ('$tm','$user_agent','$host','$ip','$port','$lang') WHERE NOT EXISTS (
    SELECT ip FROM track WHERE ip='$ip'"); 
+0

是什么错误消息?使用''die''函数来查看出了什么问题 – doniyor 2013-02-21 16:42:25

+0

[INSERT Syntax](http://dev.mysql.com/doc/refman/5.5/en/insert.html) – 2013-02-21 16:44:06

+0

我相信你的第二个查询是完全错误的。 [插入查询](http://www.w3schools.com/php/php_mysql_insert.asp)| [插入忽略](http://stackoverflow.com/questions/1361340/how-to-insert-if-not-exists-in-mysql)| [插入更新](http://stackoverflow.com/questions/4205181/insert-to-table-or-update-if-exists-mysql) – UnholyRanger 2013-02-21 16:44:23

回答

0

我发现你的错字指定动作。

你(坏的)具有更好的格式化代码:

$db->query(" 
    INSERT INTO track (
     tm, 
     user_agent, 
     host, 
     ip, 
     port, 
     lang 
    ) 
    VALUES (
     '$tm', 
     '$user_agent', 
     '$host', 
     '$ip', 
     '$port', 
     '$lang' 
    ) 
    WHERE NOT EXISTS 
    (
     SELECT ip FROM track WHERE ip='$ip' 
"); 

修复后:

$db->query(" 
    INSERT INTO track (
     tm, 
     user_agent, 
     host, 
     ip, 
     port, 
     lang 
    ) 
    VALUES (
     '$tm', 
     '$user_agent', 
     '$host', 
     '$ip', 
     '$port', 
     '$lang' 
    ) 
    WHERE NOT EXISTS 
    (
     SELECT ip FROM track WHERE ip='$ip' 
    ) -- that was missing 
"); 

无论如何,你可能需要的东西是这样的:

// check if ip exists 
    $query = $db->$query(" 
     SELECT count(ip) FROM track WHERE ip='$ip' 
    "); 

    $result = $query->fetchFirstRowSomehow(); // i dont know methods you have in $db object 

    $rows = $result['0']; // getting first (only) column that should contain count() 

    if ($rows == 0) 
    { 
     // your insert code here 
    } 
    else 
    { 
     // your update code here 
    } 
+0

这是一个等待发生的竞赛条件... – 2013-02-22 12:36:35