MySQL到PHP整数数学
我有一个MySQL表,其中有一个整数列,名为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(
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。