如果我试图更新我的数据库中的一个条目,它就不起作用了,就像在not中一样。但是,当我试图从同一个数据库中选择一个值时,效果很好。我不知道为什么会这样。
更新查询:
$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"=>数组(0){} "sqlstate"=> string(5) "00000“"id"=> int(1) }
它可能在平淡的视野中,我错过了显而易见的东西。在正确的方向上的指针是非常欣赏的。
更新:
我的表设置如下:

它只有一个条目:
我试图通过:访问表
$sql = "INSERT INTO instagram (token, expires) VALUES (?, ?)";就像SELECT一样,这是可行的。
我还发现if (!mysqli_stmt_execute($stmt))发送了两次条目,所以我把它取了出来。尽管如此,更新条目仍然不起作用。
我还附和了$tokenAccess和$tokenExpires的值。结果包含用于$tokenExpires的60和用于$tokenAccess的长寿命访问令牌,正如预期的那样。
发布于 2020-03-23 21:09:23
几年前我在学习mysqli的时候也遇到了类似的问题。我猜没有人告诉您可以启用mysqli函数的错误报告。您可以在打开连接之前添加这一行:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);我可以看到,您正在添加许多不必要的代码。您不需要所有这些if语句,也不需要手动抛出异常。PHP可以帮你做到这一点。
您不需要关闭语句,也不需要关闭连接。从不捕捉异常,只是为了打印错误消息!
使用OOP还可以使您的代码更简洁,更容易发现错误。
我看不出您的db()函数是什么样子,但希望它看起来应该是这样的。看看这段代码有多简单:
function db(): \mysqli {
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new \mysqli('localhost', 'username', 'password', 'testdb');
$mysqli->set_charset('utf8mb4'); // always set the charset
return $mysqli;
}
$conn = db();
$id = 1;
$sql = "UPDATE instagram SET token=?, expires=? WHERE id=?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('sss', $tokenAccess, $tokenExpires, $id);
$stmt->execute();关于你真正的问题:
可能一点问题都没有。affected_rows表示已更新了1行。
https://stackoverflow.com/questions/60503124
复制相似问题