php - 仅在需要时更新 MySQL 行

标签 php mysql stripe-payments

我有一个来自 Stripe 的 webhook,用于更改用户的电子邮件地址。

我希望能够在 Stripe 网站上对其进行更改并将其转移到我的网站,反之亦然。

现在的情况是: 用户在站点更改电子邮件,站点在 mysql 中更新电子邮件,将信息发送到 Stripe,Stripe 启动 webhook,webhook 无故再次更新电子邮件。

我考虑解决这个问题的方法是让 webhook mysql 查询仅在值实际要更改时再次更新电子邮件(也就是,仅当我通过 Stripe 仪表板更新电子邮件时)。

有谁知道如何将此查询转换为仅在电子邮件不同时运行的查询?

$update_email = $dbh->prepare("UPDATE `users` SET `email` = :email WHERE id = :id");
$update_email->execute(array(
    ':email'   => $new_email,
    ':id'   => $user_id,
));

我也愿意接受其他建议。

最佳答案

您可以在尝试更新之前先阅读电子邮件以确定这是否会更改值,这是比更新更便宜的操作。在您阅读和更新之间存在一种竞争条件,即该值已更改为您正在寻找的值。无论如何,我不确定您为基于主键的更新购买了多少性能。

然而,一个对您开放的优化是使更新以电子邮件值为条件,即

$update_email = $dbh->prepare("UPDATE `users` SET `email` = :email WHERE id = :id AND email <> :email");
$update_email->execute(array(
    ':email' => $new_email,
    ':id'    => $user_id,
));

这至少会防止覆盖相同的值(尽管优化器可能无论如何都会为您做这件事)。

关于php - 仅在需要时更新 MySQL 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24414942/

相关文章:

PHP 后期静态绑定(bind)引用

javascript - 将 POST 数据发送到 PHP 脚本 - jQuery、AJAX 和 PHP

PHP zend left join 转换查询中的日期

javascript - 连接injectStripe和mapDispatchToProps时出现错误: dispatch is not a function,

php - 我可以在 url 中将 $_get 值作为数组传递吗?

php - 在帖子编辑页面上显示自定义元框值的问题

php - 密码哈希算法

php - Laravel 外键迁移引用字符串问题

javascript - 无法 POST/付款(Node.js 和 Stripe)

java - 将 POJO 转换为 Map