MYSQL Update只返回TRUE,而不是FALSE?

时间:2017-08-28 13:41:54

标签: php mysql pdo

我用它来更新表格。 validator是一个随机生成的20个字符的字符串,与其他变量一起用于验证数据的有效性。

我认为,如果ResponseValidator与同一行匹配,则表格应仅更新FixtureID

+-----------+----------------------+----------+
| FixtureID | Validator            | Response |
+-----------+----------------------+----------+
|         1 | 9eb593bd154b655019ad | U        |
|         1 | 4b80ac0ac204be8968e4 | U        |
|         2 | a2d278612994d3010595 | U        |
|         2 | c01171d690d5dfb141ff | U        |
|         3 | 22cd6e5b7f6dd6e76366 | U        |

// PHP脚本

    $query = "
        UPDATE 
            invites 
        SET 
            Response=:response 
        WHERE 
            Validator=:validator
            AND
            FixtureID=:FixtureID 
        ";
    $query_params = array(
        ':response'=>'Y',
        ':FixtureID'=>'1',
        ':validator'=>'9eb593bd154b655019ad'
    );
    $stmt = $db->prepare($query);
    $result = $stmt->execute($query_params);

    if ( $result ) {
        echo 'Success';
    } else {
        echo 'Invalid';
    }

但是,我可以将验证程序更改为x,而$result仍然会返回为真。

我真的很欣赏为什么会发生这种情况的方向? 非常感谢。

2 个答案:

答案 0 :(得分:1)

$count = $stmt->rowCount(); 
if ( $count > 0 ) {
     echo 'Updated'; 
} else {
     echo 'Not updated'; 
}

答案 1 :(得分:1)

它返回true,因为您的查询已成功运行。事实上,它没有改变数据库中的任何内容并不重要。

PDO无法猜测您想要的是至少一次更新。它运行查询,如果没有错误 - 查询成功。

如果您需要应用来处理此类情况,您可能需要考虑首先使用相同的SELECT COUNT(*)条件运行WHERE,并向用户报告无需更新。