【问题标题】:MySQL to PHP Integer MathMySQL 到 PHP 整数数学
【发布时间】:2017-07-01 01:02:24
【问题描述】:

我有一个 MySQL 表,其中有一个名为 count 的整数列,我正在尝试对其进行一些基本的数学运算,然后更新值。这是我正在尝试执行的一项此类任务的示例。

$sql = 'SELECT count FROM triggers WHERE id = ?';
$params = array($id);
$result = sqlsrv_query($connection, $sql, $params);

$row = sqlsrv_fetch_array($result);

$count = intval($row[0]);
if ($count = 0)
   return -1;
$newCount = $count - 1;

$sql = 'UPDATE triggers SET count = ? WHERE id = ?';
$params = array($newCount, $id);
$result = sqlsrv_query($connection, $sql, $params);

我遇到的问题是$newCount 始终等于-1,因此count 的数据库值更新为-1。在一个特定的示例运行中,$count 等于 84,因此它通过了 if 语句。但随后 $newCount 没有设置为 83,而是设置为 -1。

我感觉这与 MySQL 值被视为字符串而不是整数有关,但我认为 intval() 会解决这个问题。我也尝试改用(int),但没有区别。

【问题讨论】:

  • echo $count if 语句前并检查其值
  • 可能 count 是一个保留字,并且在您的查询中需要反引号(这使得它失败并且是“false”,它被强制转换为 0,然后从中减去 1)。另外,我建议您尝试直接在查询中更新值。示例:stackoverflow.com/questions/16277339/…

标签: php


【解决方案1】:

您的问题是if ($count = 0)。在 PHP 中,= 是赋值运算符,== 是相等比较运算符。

tl;dr:你的意思是if ($count == 0)

(或if $count === 0。虽然$count在这里保证是一个整数,但在这种情况下并不重要。使用===,并且只在你想要的地方显式使用==调用类型摆弄也可能是一个好习惯。)

说明:让我们逐步检查您的代码。这里发生的事情是:

  1. $count = intval($row[0]);$count 设置为数据库中的任何值。
  2. if ($count = 0)0 的值分配给$count,不管其他什么。然后它测试0 的这个值,它是falsey,导致if 语句块被跳过并且return -1 永远不会被执行。这与您直接写 if (0) 时会发生的情况相同。
  3. $newCount 被赋值为 $count - 1,或在所有情况下为 -1,因为 $count 将始终为 0。
  4. 然后执行查询,UPDATE与我们的朋友-1 在行中。

【讨论】:

    【解决方案2】:

    线

    if ($count = 0)
    

    应该阅读

    if ($count === 0)
    

    这是因为您正在分配值而不是使用比较运算符。 这是一些关于 php http://www.w3schools.com/php/php_operators.asp 中的运算符的有用读物 希望对您有所帮助!

    【讨论】:

    • 只是要注意上述答案中建议的两个运算符之间的区别,== 将在类型杂耍(字符串、整数、双精度、布尔等值)之后返回 true,而 === 将返回仅当它们属于同一类型(在本例中为整数)时才为真。
    【解决方案3】:

    Ic 在你的答案列表中很好地定义了你的错误。

    我认为你的代码有点长,它可以用较短的形式在一个查询中完成,而不是强加两个查询 - 首先选择并获取计数值并更新它,你可以通过如下单个查询来实现这一点 -

    UPDATE  triggers
        // if is like ternary operator condition, true value , false value 
        SET count = IF(count > 0, count - 1, count)
    WHERE   id = ?
    

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-24
      • 2012-01-16
      相关资源
      最近更新 更多