尝试通过从标记值的当前值中减去2来更新数据库中的成员表。尝试了不同的变化,这是我能得到的最接近的。我的错误日志中没有收到错误。但它没有改变表中指定用户的'标记'的值。少了什么东西?请帮忙。
<?php
include_once $_SERVER['DOCUMENT_ROOT'] .'/includes/db_connect.php';
include_once $_SERVER['DOCUMENT_ROOT'] .'/includes/functions.php';
mysqli_report(MYSQLI_REPORT_STRICT);
session_start();
$username=trim($_SESSION['username']);
$logged = 'logged in';
$tokenquery = 'UPDATE members SET tokens = tokens - 2 WHERE username = ?';
if ($stmtlose = $mysqli->prepare($tokenquery)) {
$stmtlose->bind_param('s',$username);
$stmtlose->execute();}
答案 0 :(得分:0)
调试是关于创建和测试假设。
考虑这些“缺失”的事情:
execute
的结果缺少检查。更新查询本身可能会失败;例如使用不正确的结构或违反约束可能导致失败。 (后续的prepare
不保证实际的查询执行会成功!)
缺少对更新行数的检查(通过affected_rows
)。如果没有行受到影响,那么,很简单,WHERE没有匹配任何记录 - 这会使$ username怀疑。
prepare
失败时会发生错误的处理。如果bind/execute
不成功,则不会运行prepare
(在if语句中)。
在不太可能的情况下使用显式事务,可能会丢失提交。
我怀疑这个问题将在前两个案例中揭晓。