Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL到PHP整数数学_Php - Fatal编程技术网

MySQL到PHP整数数学

MySQL到PHP整数数学,php,Php,我有一个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(

我有一个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语句。但是,它不是被设置为83,而是被设置为-1

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

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

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

(或者,
如果$count===0
。虽然这里保证了
$count
是一个整数,但在这种情况下,这并不重要。使用
===
,并且只显式地使用
=
,在您想要调用类型微调的地方,这也是一个好习惯。)

说明:让我们逐步浏览您的代码。这里发生的是:

  • $count=intval($row[0])
    $count
    设置为数据库中的任意值
  • if($count=0)
    0
    的值赋给
    $count
    ,而不考虑其他任何内容。然后它测试该值
    0
    ,该值为假,导致跳过if语句块,并且从不执行
    return-1
    。这与直接编写
    if(0)
    时发生的情况相同
  • $newCount
    在所有情况下都被分配一个值
    $count-1
    ,或
    -1
    ,因为
    $count
    始终为0
  • 然后执行查询,
    UPDATE
    ing行,除了我们的朋友
    -1
  • 如果($count=0),您的问题是
    。在PHP中,
    =
    是赋值运算符,
    =
    是相等比较运算符

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

    (或者,
    如果$count===0
    。虽然这里保证了
    $count
    是一个整数,但在这种情况下,这并不重要。使用
    ===
    ,并且只显式地使用
    =
    ,在您想要调用类型微调的地方,这也是一个好习惯。)

    说明:让我们逐步浏览您的代码。这里发生的是:

  • $count=intval($row[0])
    $count
    设置为数据库中的任意值
  • if($count=0)
    0
    的值赋给
    $count
    ,而不考虑其他任何内容。然后它测试该值
    0
    ,该值为假,导致跳过if语句块,并且从不执行
    return-1
    。这与直接编写
    if(0)
    时发生的情况相同
  • $newCount
    在所有情况下都被分配一个值
    $count-1
    ,或
    -1
    ,因为
    $count
    始终为0
  • 然后执行查询,
    UPDATE
    ing行,除了我们的朋友
    -1
  • 线路

    if ($count = 0)
    
    应该读

    if ($count === 0)
    
    这是因为您正在赋值,而不是使用比较运算符。 下面是一些关于php中运算符的有用阅读资料 希望有帮助

    线路

    if ($count = 0)
    
    应该读

    if ($count === 0)
    
    这是因为您正在赋值,而不是使用比较运算符。 下面是一些关于php中运算符的有用阅读资料
    希望有帮助

    你的错误由Ic在你的答案列表中明确定义

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

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

    你的错误由Ic在你的答案列表中明确定义

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

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

    echo$count
    在if语句之前检查它的值count可能是一个保留字,并且在查询中需要反勾号(这会导致查询失败并为“false”,将其强制转换为0,然后从中减去1)。另外,我建议您尝试直接在查询中更新该值。示例:
    echo$count
    before if语句并检查其值count可能是一个保留字,在查询中需要反勾号(这会导致查询失败并为“false”,将其强制转换为0,然后从中减去1)。另外,我建议您尝试直接在查询中更新该值。示例:请注意上述答案中建议的两个运算符之间的差异,==在进行类型转换(字符串、int、double、bool等..值)后将返回true,而===仅当它们属于相同类型(在本例中为整数)时才会返回true。请注意上述答案中建议的两个运算符之间的差异,==将在类型转换(字符串、int、double、bool等值)后返回true,而===仅当它们是相同类型(在本例中为整数)时才会返回true。