首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中的PHP查询不更新,而是选择和插入工作

问MySQL中的PHP查询不更新,而是选择和插入工作
EN

Stack Overflow用户
提问于 2020-03-03 08:37:51
回答 1查看 3.6K关注 0票数 0

如果我试图更新我的数据库中的一个条目,它就不起作用了,就像在not中一样。但是,当我试图从同一个数据库中选择一个值时,效果很好。我不知道为什么会这样。

更新查询:

代码语言:javascript
复制
$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) }

它可能在平淡的视野中,我错过了显而易见的东西。在正确的方向上的指针是非常欣赏的。

更新:

我的表设置如下:

​

它只有一个条目:

  • 令牌=ABCdefg123adc.<-示例字符串,包含数字和字母
  • created_at= 60
  • created_at = 2019-12-01 08:57:26
  • id = 1.

我试图通过:访问表

代码语言:javascript
复制
$sql = "INSERT INTO instagram (token, expires) VALUES (?, ?)";

就像SELECT一样,这是可行的。

我还发现if (!mysqli_stmt_execute($stmt))发送了两次条目,所以我把它取了出来。尽管如此,更新条目仍然不起作用。

我还附和了$tokenAccess和$tokenExpires的值。结果包含用于$tokenExpires的60和用于$tokenAccess的长寿命访问令牌,正如预期的那样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-23 21:09:23

几年前我在学习mysqli的时候也遇到了类似的问题。我猜没有人告诉您可以启用mysqli函数的错误报告。您可以在打开连接之前添加这一行:

代码语言:javascript
复制
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

我可以看到,您正在添加许多不必要的代码。您不需要所有这些if语句,也不需要手动抛出异常。PHP可以帮你做到这一点。

您不需要关闭语句,也不需要关闭连接。从不捕捉异常,只是为了打印错误消息!

使用OOP还可以使您的代码更简洁,更容易发现错误。

我看不出您的db()函数是什么样子,但希望它看起来应该是这样的。看看这段代码有多简单:

代码语言:javascript
复制
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行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60503124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档