【问题标题】:Turn string from query into integer for another query将查询中的字符串转换为整数以进行另一个查询
【发布时间】:2015-01-15 23:16:27
【问题描述】:

基本上,我有一个从数据库中获取数字的查询,然后我需要获取该数字,将其转换为整数,这样我就可以给它加 1,然后再次查询它以更新数据库。

基本上,我希望每次有人点击它时都会将数据库编号更新为相同的数字 + 1。

代码:

$id = $_POST['id'];
$curr = mysqli_query($mysqli, "SELECT `likes` FROM savage WHERE `id` = '$id'");
$curr2 = intval($curr) + 1;
mysqli_query($mysqli, "UPDATE savage SET `likes`='$curr2' WHERE `id`='$id'");

我尝试使用 intval?我只是在尝试。

【问题讨论】:

  • 为什么将数字作为字符串存储在数据库中?另外,这段代码会产生什么;即有什么问题?
  • 其实,刚才看了一下,这里的 mysqli 文档并没有应有的用处。这是切换到 PDO 的一个很好的理由。 php.net/manual/en/pdo.query.php 无论如何,它也适用于更多的数据库类型,而不仅仅是 MySQL。
  • 该值作为整数存储在数据库中,但是当我执行 $curr + 1 时,它会在最初为 0 时将数据库中的数字更新为“2”。然后,如果你在数字为“2”时尝试做同样的事情,它根本不会更新。

标签: php mysqli integer


【解决方案1】:

在这里,最好这样做:

mysqli_query($mysqli, "UPDATE savage SET `likes`=`likes`+1 WHERE `id`='$id'");

如果您读取 PHP 中的值,然后添加一个,然后保存,您可能会导致数据不同步。

想象一下两个人同时点击这个页面。如果它们真的按顺序排列,您会得到:

A 人:数据库读取为 1。您添加 1 并保存。现在值为 2。

人 B:数据库读取为 2。您添加 1 并保存。现在值为 3。

但可能会发生每个人几乎同时读取数据库:

A 人:数据库读取为 1。您添加 1 并保存。现在值为 2。

人 B:数据库读取为 1。您添加 1 并保存。现在值为 2。

换句话说,您可能会增加陈旧的值并进行保存。如果您在一条 SQL 语句中完成所有操作,则不会出现此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2023-03-11
    • 2016-02-05
    • 2014-12-03
    • 1970-01-01
    相关资源
    最近更新 更多