0

私は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... など [ID 5-9 は存在しません] )。「$query_updateLocation」の「WHERE」に関係しているように感じます。なぜこれが起こるのか、誰にも手がかりがありますか?

4

1 に答える 1

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);
于 2012-10-16T03:38:17.060 に答える