Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
PHP/MYSQL-数字操作在零处停止_Php_Mysql_Loops_While Loop - Fatal编程技术网

PHP/MYSQL-数字操作在零处停止

PHP/MYSQL-数字操作在零处停止,php,mysql,loops,while-loop,Php,Mysql,Loops,While Loop,我觉得有一个简单的解决办法,但我在任何地方都找不到 我有一个while()循环,在每个循环的开头,我从MYSQL数据库中得到的数字减去1。但出于某种原因,它会停在0。如果从数据库中提取的值是0或负数,我需要将该数字变为负数 //Get members $select = mysql_query("SELECT * FROM members") or die(mysql_error()); //Start the loop while($members= mysql_fetch_row(

我觉得有一个简单的解决办法,但我在任何地方都找不到

我有一个while()循环,在每个循环的开头,我从MYSQL数据库中得到的数字减去1。但出于某种原因,它会停在0。如果从数据库中提取的值是0或负数,我需要将该数字变为负数

    //Get members
$select = mysql_query("SELECT * FROM members") or die(mysql_error());

//Start the loop
while($members= mysql_fetch_row($select)){

//Get limit
$limit = $members['limit'];
    $newlimit = $limit - 1;

mysql_query("UPDATE `members` SET `limit` = '".$newlim."' WHERE `email`='".$members['email']."'");
}
有什么建议吗?此代码成功运行,直到值变为0。但我需要它来保持减法

提前谢谢! 布兰登


编辑:更新了上面的代码。出现错误

删除额外的=符号

$newlimit = $limit - 1;
并将SQL语句中的
$newlim
替换为
$newlimit

另外请注意,您可以在一条SQL语句中执行相同的操作,而不涉及任何循环或php:

UPDATE `members` SET `limit`=`limit`-1

我猜yout
limit
列是一个
无符号INT
。无符号数可以是有符号数的两倍,但它们不能有负值(因此无符号)


您可以使用ALTER TABLE语句将列更改为
INT
,但需要小心,因为如果
limit
字段中存储的任何值大于2147483647(如果将其更改为带符号的INT),这些值将不会被保留。

如果为负值,需要循环多少次?如果计数为负数,你能给它加上一个数字使之为正数吗?你的表中的整型列
是无符号的吗?一定不是为了存储<0的值。您是想将更新查询放在while循环之外吗?是否正在进行某种检查以查看是否应该降低限制?因为如果你真的只想减少每个人的限制,你可以在一个mysql查询中这样做:更新
成员
SET
limit
=
限制
限制
-1@MattBusche限制根据用户使用函数的次数而减少。第一个示例并没有因为任何原因给我一个负值。如果限制值为0,并且我在代码运行后检查数据库,则该值保持为零。由于某种原因,第二个示例不适用于我,因此我开始使用我在示例中提出的代码。不过,我会再试一试。我发布的代码是PHP,所以在更新数据库之前,
$newlimit
应该等于
-1
,如果之前为零。然后,您仍然可以尝试找出数据库没有更新的原因,如果事实上它仍然没有更新(正如其他人所指出的,您可能需要检查数据库列的数据类型),那么数据库肯定正在更新。限制大于1的用户将正确降低其限制。。。直到它达到0。我会再次检查你的答案!回去,仔细检查了一切。摆脱了
$newlim=$lim-1
,只使用了
UPDATE
members`SET
limit
=
limit
-1`就成功了!现在是负数!非常感谢。出于某种原因,我的限制列是“VARCHAR”,所以我继续,切换了它。我继续使用下面帖子中的第二个例子。我仍然得到0作为一个值。它不会变成负数。吼叫声还有什么见解吗?这就是最终给我答案的原因,因为在这个问题之前,我已经尝试过使用下面的例子。当我将列更改为INT时,它开始工作。谢谢你的回答!