Php脚本& mysql查询错误,无法初始化变量

时间:2017-06-27 20:53:53

标签: php mysql

我有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数据库中的数据,它的工作原理。所以我的问题是这个脚本中的问题是什么?

1 个答案:

答案 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)