通过PHP插入/更新MySQL表,行将更新但不插入。

时间:2012-10-16 03:34:28

标签: php mysql

我对PHP不是很有经验,非常感谢任何帮助!我正在使用HTTP Post向我的服务器发送用户名,经度和纬度。我首先检查用户是否存在于user_info表中。如果是,那么我尝试用该用户名更新maps_user_location表。我想要发生的是,如果查询失败,由于在maps_user_location表中找不到用户名,那么我希望它被添加。我试过用下面的代码来做。

$localhost = mysql_connect($hostname_localhost,$username_localhost,$password_localhost)
or
trigger_error(mysql_error(),E_USER_ERROR);

mysql_select_db($database_localhost, $localhost);

$latitude = $_POST['latitude'];
$longitude = $_POST['longitude'];
$username = $_POST['username'];

if ($latitude != 0 && $longitude != 0) {
    $query_userCheck = "SELECT * FROM user_info WHERE login_username = '".$username."';";
    if ( mysql_query($query_userCheck) ) {
        $query_updateLocation =  "UPDATE  `maps_user_location` SET  `lat` =  '".$latitude."',`long` =  '".$longitude."' WHERE  
        `login_username` = '".$username."';";
        if ( !mysql_query($query_updateLocation) ){
            $query_newLocation = "INSERT INTO `maps_user_location` ( `id` ,`login_username` ,`lat` ,`long` ,`track`)
            VALUES ( NULL ,  '".$username."',  '".$latitude."',  '".$longitude."',  '0');";

            mysql_query($query_newLocation);
        }

    }
}

当我执行代码时,它会毫无障碍地完成。问题是如果用户名不存在则永远不会插入行,但如果用户名存在则行会更新。另外,当我手动添加一行时,id列似乎在每次请求后递增(序列将转到1,2,3,4,10,11,12 ...等[ids 5-9不存在] )。我觉得它与'$ query_updateLocation'中的'WHERE'有关。任何人都知道为什么会这样?

1 个答案:

答案 0 :(得分:4)

您可以在一个查询中执行此操作,使用 INSERT...ON DUPLICATE KEY UPDATE

INSERT INTO  maps_user_location ( login_username , lat, long, track)
VALUES ('".$username."',  '".$latitude."', '".$longitude."',  '0')
        ON DUPLICATE KEY UPDATE
             lat    =  '".$latitude."' ,
            long  =  '".$longitude."'

但在其他任何事情之前,请确保列UNIQUE CONSTRAINT上有login_username。如果尚未添加,则可以使用此命令更改表格

ALTER TABLE maps_user_location ADD UNIQUE (login_username);