我的问题是: 我在MySQL中有一个用户表。我用MySQLi查询了一下:
if($stmt = $mysqli->prepare("SELECT condition,name,money FROM users WHERE fbid = ?")){
$stmt->bind_param('s',$_SESSION['FBID']);
$stmt->execute();
$stmt->store_result();
$num_of_rows = $stmt->num_rows;
$stmt->bind_result($condition,$name,$money);
while ($stmt->fetch()) {
这就是我的问题,因为我希望不同的用户在其ID中添加相同的用户名。所以,我的代码如下:
if($_GET['name']!='' && $money>'500'){
$stmt2 = $mysqli->prepare("UPDATE users SET `condition` = `condition` + 5, `money` = `money` - 5 WHERE fbid = ? AND name = ?");
$stmt2->bind_param("ss", $_SESSION['FBID'],$_GET['name']);
$stmt2->execute();
$stmt2->close();
我想仅更新用户ID = $_SESSION[fbid]
和name = $_GET[name]
的数据库中的值。因此,如果我有一个ID为1922838445
的帐户,并且我有三个名称,例如John
,Joe
,以及Jill和$_GET[name]=='Joe'
,则只更新该值IDS。它一直有效,直到只更新得到的值,但它做了3次...因为while ()
可能???我该如何解决?
两个代码示例必须在!!之后!因为检查钱的价值..
答案 0 :(得分:3)
不需要第一个SELECT
和循环,只需将money
上的条件放入UPDATE
查询本身。
if ($_GET['name'] != '') {
$stmt = $mysqli->prepare("
UPDATE users
SET condition = condition + 5, money = money - 5
WHERE fbid = ? AND name = ?
AND money > 500")
$stmt->bind_param("ss", $_SESSION['FBID'], $_GET['name']);
$stmt->execute();
}
答案 1 :(得分:1)
尝试这样做只获得一条记录:
它只获取您需要的记录,因为它在您计划更新的两个参数上都有一个WHERE子句,而不是像以前那样只对fbid进行部分匹配。
在您获得3条记录之前,因为您进行了部分密钥搜索,然后循环遍历记录并反复更新相同的记录,而不管您循环的记录中密钥的第二部分的值如何
if($stmt = $mysqli->prepare("SELECT condition,name,money FROM users WHERE fbid = ? AND name = ?")){
$stmt->bind_param("ss", $_SESSION['FBID'],$_GET['name']);
$stmt->execute();