【发布时间】: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 (...), (...)。此外,您应该使用PDO或MySQLi之类的东西。mysql驱动很老,不建议大家使用。