【问题标题】:why does php mysql update returns a success but never updated the column?为什么 php mysql update 返回成功但从未更新列?
【发布时间】:2015-10-26 04:52:16
【问题描述】:

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

这是我的查询

$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 并回显查询但没有运气.. 正如每个人都推荐/insits :) 我将尝试将查询转换为 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 方法尝试更新和插入时,更新和插入都会成功并具有正确的值,但是当我使用应用程序执行此操作时,更新和插入返回成功并且插入具有正确的值但更新并没有改变我正在改变的列..

【问题讨论】:

  • 回显你正在做的查询,在 sqlYog 中运行它,它可能会触发任何错误
  • 你真的不应该像 John 这样写代码。首先,您使用的是参数,而不是 POST。其次,您正在使用已弃用的 mysql_* 函数。您的数据可以并且将会承受 sql 注入攻击。在上面的代码中,它可以进行二阶 sql 注入。在选择 stmts 的情况下,肯定是以同样的方式完成的,您的表可以很容易地被删除。而是将 mysqli 或 pdo 与准备好的语句一起使用。
  • @drew 感谢您提供的信息,但我完全知道我应该使用 POST 方法,但我这样做是为了让我可以轻松测试它,并在我的所有功能/特性正常工作时更改它..
  • 很公平。后面的人可能不会。另外加入 pdo 潮流!
  • if 块中的两个查询可以合二为一:VALUES (...), (...)。此外,您应该使用PDOMySQLi 之类的东西。 mysql驱动很老,不建议大家使用。

标签: php android mysql


【解决方案1】:

使用mysql_affected_rows() 检查有多少行受到影响。试试这个,

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

【讨论】:

    【解决方案2】:

    试试这个人,使用 mysql_num_rows()。 mysql_affected_rows() 为您提供受上次执行查询影响的行数。你知道有多少行受到影响。希望对你有帮助

    $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");
    
           }
        }
    

    【讨论】:

      【解决方案3】:

      确保$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

      【讨论】:

      • 我正在学习 PDO,但回到问题所在,插入的数据是 $user_id 和 $id,这也是更新时 WHERE 中的值,当它们被插入时,它们具有我期待正确的值,问题是更新查询永远不会改变我试图改变的列。
      猜你喜欢
      • 2014-06-15
      • 1970-01-01
      • 2021-04-25
      • 2020-12-05
      • 2012-06-13
      • 2018-07-19
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      相关资源
      最近更新 更多