MySQL到PHP整数数学

use*_*445 1 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($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);
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是$newCount始终等于-1,因此数据库值count更新为-1.在一个特定的示例中,run $count等于84,因此它传递了if语句.但是$newCount,它被设置为-1 而不是设置为83.

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

lc.*_*lc. 5

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

tl;博士:你的意思if ($count == 0).

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

说明:让我们逐步完成您的代码.这里发生的事情是:

  1. $count = intval($row[0]);设置$count为数据库中的任何值.
  2. if ($count = 0)分配0to 的值$count,不管其他什么.然后它测试这个值0假的,导致if语句块被跳过并且return -1永远不会被执行.这和你直接写的一样if (0).
  3. $newCount被赋值为$count - 1,或者-1在所有情况下都被赋值$count为0.
  4. 然后执行查询,UPDATE使用我们的朋友,而不是我们的朋友-1.