【发布时间】:2020-06-15 14:12:20
【问题描述】:
如果我尝试更新我的数据库中的条目,它不起作用,就像不更新一样。但是当我尝试从同一个数据库中选择一个值时,效果很好。我不知道为什么会这样。
更新查询:
$id = 1;
try {
$conn = db();
$sql = "UPDATE instagram SET token=?, expires=? WHERE id=$id";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
throw new Exception($conn->error);
}
mysqli_stmt_bind_param($stmt, "si", $tokenAccess, $tokenExpires);
mysqli_stmt_execute($stmt);
// on error
if (!mysqli_stmt_execute($stmt)) {
throw new Exception($conn->error);
}
var_dump($stmt);
$stmt->close();
$conn->close();
}
catch (Exception $e) {
print_r($e);
}
var_dump for $stmt 返回:
object(mysqli_stmt)#4 (10) { ["affected_rows"]=> int(1) ["insert_id"]=> int(0) ["num_rows"]=> int(0) ["param_count"]=> int(2) ["field_count"]=> int(0) ["errno"]=> int(0) ["error"]=> string(0) "" ["error_list"]=> array(0) { } ["sqlstate"]=> string(5) "00000" ["id"]=> int(1) }
这可能是显而易见的,我错过了明显的。非常感谢指向正确方向的指针。
更新:
它有一个条目,其中:
- token = ABCdefg123adc........
- 过期 = 60
- created_at = 2019-12-01 08:57:26
- id = 1。
我尝试通过以下方式访问表格:
$sql = "INSERT INTO instagram (token, expires) VALUES (?, ?)";
这就像SELECT 一样有效。
我还发现if (!mysqli_stmt_execute($stmt)) 发送了两次条目,所以我把它拿出来了。不过,更新条目不起作用。
我还回应了$tokenAccess 和$tokenExpires 的值。结果包含60 的$tokenExpires 和$tokenAccess 的长期访问令牌,正如预期的那样。
【问题讨论】:
-
有什么错误吗?如果没有错误,则表示更新有效..也许没有更新价值?
-
尝试调试你的
id可能你的数据库表没有id值的行 -
你能添加你的表格描述吗?
-
er,你怎么知道它没有更新?
var_dump表示它正在更新。如果您正在更新具有与已经存在的相同值的表,MySQL 将检测到这一点并且不会执行它(因为这是浪费时间)。 -
MySQL 不会每次都检查你是否发送相同的值,它只会一次又一次地更新数据库,直到你要求 MySQL 检查值并在匹配时返回错误。这需要一个 select 语句,我没有看到它有问题。我在回答中评论了受影响的行,只需取消注释并回显以查看您的行是否受到影响! (它将显示更新了多少行)。您正在执行语句两次,我在回答中将其降为 1。
标签: php mysql mysqli sql-update