PHP在MySQL中的更新查询不起作用,但SELECT和INSERT操作是可以的。

8 浏览
0 Comments

PHP在MySQL中的更新查询不起作用,但SELECT和INSERT操作是可以的。

在尝试更新数据库中的条目时,无法成功更新。但是,当我尝试从同一个数据库中选择一个值时,却能够正常工作。我不确定为什么会出现这种情况。

更新查询:

$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);
    // 出错时
    if (!mysqli_stmt_execute($stmt)) {
        throw new Exception($conn->error);
    }
    var_dump($stmt);
    $stmt->close();
    $conn->close();
}
catch (Exception $e) {
    print_r($e);
}

对于`$stmt`的`var_dump`返回:

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) 
}

可能是显而易见的问题,我可能错过了。非常感谢指点方向。

更新:

我的表设置如下:

[![table setup](https://i.stack.imgur.com/zXgd2.png)](https://i.stack.imgur.com/zXgd2.png)

其中有一个条目:

- token = ABCdefg123adc........ <-- 示例字符串,包含数字和字母

- expires = 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`的值。结果包含了预期的`$tokenExpires`的`60`和`$tokenAccess`的长期访问令牌。

0
0 Comments

问题的原因是作者没有启用mysqli函数的错误报告功能,并且在代码中添加了很多不必要的语句和异常处理。解决方法是在打开连接之前添加mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);来启用错误报告功能,简化代码并使用面向对象编程可以使代码更清晰易读。此外,关于作者的实际问题,affected_rows指示已更新了1行数据。

0