我有Php脚本将数据上传到MySql数据库,我将数据从android发送到此脚本。
<?php
$mac=null;
$android_id=null;
$con=mysqli_connect("localhost",".....","....","...");
if(isset($_POST["mac"])){
$mac=$_POST["mac"];
}
if(isset($_POST["android_id"])){
$android_id=$_POST["android_id"];
}
if(isset($_POST["latitude"])){
$latitude=$_POST["latitude"];
}
if(isset($_POST["longitude"])){
$longitude=$_POST["longitude"];
}
if(isset($_POST["latitudeDestination"])){
$latitudeDestination=$_POST["latitudeDestination"];
}
if(isset($_POST["longitudeDestination"])){
$longitudeDestination=$_POST["longitudeDestination"];
}
if(isset($_POST["kindOfUser"])){
$kindOfUser=$_POST["kindOfUser"];
}
$query1="select count(*) from marker where mac='$mac' AND android_id='$android_id'";
$result = mysqli_query($con,$query1) or die(mysqli_error($con));
if(mysqli_num_rows($result)==0) {
$query2="INSERT INTO marker (mac,android_id,latitude,longitude,latitudeDestination,longitudeDestination,kindOfUser) VALUES (?,?,?,?,?,?,?)";
$statement=mysqli_prepare($con,$query2) or die(mysqli_error($con));
}
else {
$query3="INSERT INTO marker (mac,android_id,latitude,longitude,latitudeDestination,longitudeDestination,kindOfUser) VALUES (?,?,?,?,?,?,?)";
$statement=mysqli_prepare($con,$query3) or die(mysqli_error($con));
$query4 ="DELETE FROM marker where mac='$mac' AND android_id='$android_id'";
$statement2=mysqli_query($con,$query4) or die(mysqli_error($con));
}
mysqli_stmt_bind_param($statement,"ssdddds",$mac,$android_id,$latitude,$longitude,$latitudeDestination,$longitudeDestination,$kindOfUser);
mysqli_stmt_execute($statement);
$response=array();
$response["success"]=true;
echo json_encode($response);
?>
它返回success=true
,但数据库没有任何变化。
在我将$mac=null
和$android_id=null
放在起始行之前。该错误表明这两个变量未定义。我调试了android应用程序和数据存在,也试图从数据库接口本身插入mysql数据库中的数据,它的工作原理。所以我的问题是这个脚本中的问题是什么?
答案 0 :(得分:0)
您测试该行是否已存在的查询使用SELECT COUNT(*)
,因此它将始终返回1行。然后,您要检查mysqli_num_rows()
返回的内容,并且它始终为1
,即使没有匹配的行。
使用SELECT 1
代替SELECT COUNT(*)
,或者从此查询中获取行并测试$row[0]
中的值以查看它是否0
但在ON DUPLICATE KEY UPDATE
查询中使用INSERT
会更简单,而不是检入代码。只需确保(mac, android_id)
上有唯一索引即可。然后使用查询:
INSERT INTO marker (mac,android_id,latitude,longitude,latitudeDestination,longitudeDestination,kindOfUser)
VALUES (?,?,?,?,?,?,?)
ON DUPLICATE KEY UPDATE latitude = VALUES(latitude), longitude = VALUES(longitude), latitudeDestination = VALUES(latitudeDestination), longitudeDestination = VALUES(longitudeDestination), kindOfUser = VALUES(kindOfUser)