为什么php mysql update会返回成功但从未更新过该列?

时间:2015-10-26 04:52:17

标签: php android mysql

我的基本目标是更新单行,如果成功,它会在不同的表中插入一些数据。

这是我的查询

$upd = mysql_query("UPDATE request_tbl SET status='1' WHERE sender='$user_id' AND reciever='$id'", $con);

if($upd){
    $result = mysql_query("INSERT INTO contact_tbl (id, friend_id) VALUES ('$user_id', '$id')", $con);
    $result2 = mysql_query("INSERT INTO contact_tbl (id, friend_id) VALUES ('$id', '$user_id')", $con);

    if($result && $result2){
        $jsonresult = $myFunctions->jsonRequest("Sent Request");
    }
    else{
        $jsonresult = $myFunctions->jsonRequest("Failed Request");

    }

}

注意:场景是我使用Android应用程序将数据更新到网络服务器

当我尝试使用此测试查询时。

http://----/-----.php?req=accept&user-id=5&id=1

我获得成功消息和更新,并将数据插入数据库中。但是,当我尝试从应用程序发送请求时,它返回成功消息并插入数据,这意味着更新成功但在数据库中它永远不会更新。

我还尝试将列状态的数据类型更改为int或varchar,但仍然具有相同的效果,插入被执行但更新从未发生过或者是更新是奇怪的?

编辑! ! ! 我确实尝试了所有推荐的解决方案,如mysql_affected_rows()> 0并回应查询但没有运气..因为每个人推荐/坚持:)我会尝试将查询转换为PDO或mysqli感谢大家的帮助。

**编辑2! ! ! **

我试图将我的查询转换为PDO 这是我的代码

    $upd = $con->prepare("UPDATE request_tbl SET `status`='1' WHERE `sender`='$user_id' AND `reciever`='$id' AND `status`='0'");

try{
    $upd->execute();
    $result = $con->prepare("INSERT INTO contact_tbl (id, friend_id) VALUES (?, ?)");
    $result->bindParam(1, $user_id);
    $result->bindParam(2, $id);
    $result2 = $con->prepare("INSERT INTO contact_tbl (id, friend_id) VALUES (?, ?)");
    $result2->bindParam(1, $id);
    $result2->bindParam(2, $user_id);

    try{
        $result->execute();
        $result2->execute();
        $jsonresult = $myFunctions->jsonRequest("Sent Request");
    }
    catch(PDOException $e){
        $jsonresult = $myFunctions->jsonRequest("Failed Request");
    }
}
catch(PDOException $e){
    $jsonresult = $myFunctions->jsonRequest("Failed Request");
}

echo $jsonresult;

但是我收到了相同的结果,每当我使用url方法尝试使用正确的值时更新和插入成功,但是当我使用应用程序时,更新和插入返回成功并且插入具有正确的值但更新并没有改变列改变..

3 个答案:

答案 0 :(得分:0)

使用mysql_affected_rows()检查受影响的行数。试试这个,

if(mysql_affected_rows()){
    // your stuff here.
}

答案 1 :(得分:0)

确保$user_id$id的值显示在您当前的页面上。

希望您将用户ID变量作为user-id传递并检索为$_GET['user-id']

如果完美,则echo同时查询并在phpmyadmin上手动运行打印查询。这将通过错误

echo $result = mysql_query("INSERT INTO contact_tbl (id, friend_id) VALUES ('$user_id', '$id')", $con);
echo $result2 = mysql_query("INSERT INTO contact_tbl (id, friend_id) VALUES ('$id', '$user_id')", $con);

超过mysql_query的内容已被弃用。这些功能将不复存在。试试PDOMySQLi

答案 2 :(得分:0)

尝试这个民谣,使用mysql_num_rows()。 mysql_affected_rows()为您提供上次执行查询所感染的行数。而且你知道manny行是如何被感染的。希望这可以帮到你

$upd = mysql_query("UPDATE request_tbl SET status='1' WHERE    sender='$user_id' AND reciever='$id'", $con);

$NumsRowsAfected = mysql_affected_rows();

    if(mysql_affected_rows() > 0){
       $result = mysql_query("INSERT INTO contact_tbl (id, friend_id) VALUES     ('$user_id', '$id')", $con);
       $result2 = mysql_query("INSERT INTO contact_tbl (id, friend_id) VALUES ('$id', '$user_id')", $con);

       if($result && $result2){
         $jsonresult = $myFunctions->jsonRequest("Sent Request");
       }
       else{
         $jsonresult = $myFunctions->jsonRequest("Failed Request");

       }
    }