PHP while()函数运行我的查询3次

时间:2018-01-19 20:29:36

标签: php mysql mysqli

我的问题是: 我在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的帐户,并且我有三个名称,例如JohnJoe,以及Jill和$_GET[name]=='Joe',则只更新该值IDS。它一直有效,直到只更新得到的值,但它做了3次...因为while ()可能???我该如何解决?

两个代码示例必须在!!之后!因为检查钱的价值..

2 个答案:

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