Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过PHP插入/更新MySQL表,行将更新但不插入。_Php_Mysql - Fatal编程技术网

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

通过PHP插入/更新MySQL表,行将更新但不插入。,php,mysql,Php,Mysql,我不是很有经验的PHP和将感谢任何帮助!我正在使用HTTP Post向我的服务器发送用户名、经度和纬度。我首先检查user\u info表中是否存在该用户。如果是这样,那么我将尝试使用该用户名更新maps\u user\u location表。我希望发生的是,如果查询失败,因为在maps\u user\u location表中找不到用户名,那么我希望添加它。我试着用下面的代码来做 $localhost = mysql_connect($hostname_localhost,$username_l

我不是很有经验的PHP和将感谢任何帮助!我正在使用HTTP Post向我的服务器发送用户名、经度和纬度。我首先检查
user\u info
表中是否存在该用户。如果是这样,那么我将尝试使用该用户名更新
maps\u user\u location
表。我希望发生的是,如果查询失败,因为在
maps\u user\u 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…等等[ID5-9不存在])。我有一种感觉,它与“$query\u updateLocation”中的“WHERE”有关。有人知道为什么会这样吗

您只需在单个查询中使用

INSERT INTO  maps_user_location ( login_username , lat, long, track)
VALUES ('".$username."',  '".$latitude."', '".$longitude."',  '0')
        ON DUPLICATE KEY UPDATE
             lat    =  '".$latitude."' ,
            long  =  '".$longitude."'
但在做其他事情之前,请确保在
login\u username
列上有一个
唯一约束。如果尚未添加,可以使用此命令更改表

ALTER TABLE maps_user_location ADD UNIQUE (login_username);

您只需在单个查询中使用

INSERT INTO  maps_user_location ( login_username , lat, long, track)
VALUES ('".$username."',  '".$latitude."', '".$longitude."',  '0')
        ON DUPLICATE KEY UPDATE
             lat    =  '".$latitude."' ,
            long  =  '".$longitude."'
但在做其他事情之前,请确保在
login\u username
列上有一个
唯一约束。如果尚未添加,可以使用此命令更改表

ALTER TABLE maps_user_location ADD UNIQUE (login_username);

这里完全没有任何错误处理,只是假设代码和查询工作正常。您应该具备的最基本的条件是
mysql\u查询(…)或die(mysql\u error())
。post请求中的参数是我自己定义的,所以SQL注入是不可能的。谢谢你的提醒。我已经按照您的建议添加了die()函数。再次感谢!这完全是错误的想法。没有所谓的“安全”职位。如果脚本正在从用户接收数据,则必须将该用户视为恶意用户。伪造帖子并提交任何你想提交的东西绝非易事。明白了,我将实施更改。谢谢。您完全没有任何错误处理,只是假设您的代码和查询工作正常。您应该具备的最基本的条件是
mysql\u查询(…)或die(mysql\u error())
。post请求中的参数是我自己定义的,所以SQL注入是不可能的。谢谢你的提醒。我已经按照您的建议添加了die()函数。再次感谢!这完全是错误的想法。没有所谓的“安全”职位。如果脚本正在从用户接收数据,则必须将该用户视为恶意用户。伪造帖子并提交任何你想提交的东西绝非易事。明白了,我将实施更改。谢谢。这就成功了,有点语法错误,但我很快就解决了。非常感谢。这样做的技巧,小语法错误,但我得到了解决它很快。非常感谢。