php 在MySQL中将行值增加和减少1

kadbb459  于 2023-02-07  发布在  PHP
关注(0)|答案(5)|浏览(126)

嗨,我有一个MySQL数据库表“点”用户可以点击一个按钮,一个点应该从他们的帐户中删除,他们按下的按钮有另一个用户的ID,因此他们的帐户必须增加一个。
我让它在jQuery中工作,并检查了Firebug中的变量/帖子,它确实发送了正确的数据,例如:

userid= 1 
posterid = 4

我认为问题出在我的PHP页面上:

<?php

include ('../functions.php');

$userid=mysql_real_escape_string($_POST['user_id']);
$posterid=mysql_real_escape_string($_POST['poster_id']);

if (loggedin()) 
{
include ('../connection.php');
$query1 = "UPDATE `points` SET `points` = `points` - 1 WHERE `userID` = '$userid'";
$result1=mysql_query($query1);

$query2 = "UPDATE `points` SET `points` = `points` + 1 WHERE `userID` = '$posterid'";
$result2=mysql_query($query2);

if ($result1 && result2)
{
    echo "Successful";  
    return 1;
}
else
{

    echo mysql_error();
    return 0;   
}
}
?>

有什么想法吗?谢谢:)

eimct9ow

eimct9ow1#

增加/减少字段值的两个查询是不必要的:

UPDATE table SET field = field + 1 WHERE id = 1

是一个完全有效的查询,如下所示:

mysql> describe points;
+--------+---------+------+-----+---------+-------+
| Field  | Type    | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+-------+
| uid    | int(11) | NO   | PRI | NULL    |       |
| points | int(11) | YES  |     | 0       |       |
+--------+---------+------+-----+---------+-------+
2 rows in set (0.05 sec)

mysql> insert into points VALUES (1,0),(2,0);
Query OK, 2 rows affected (0.14 sec)

mysql> select * from points;
+-----+--------+
| uid | points |
+-----+--------+
|   1 |      0 |
|   2 |      0 |
+-----+--------+
2 rows in set (0.05 sec)

mysql> update points set points = points+1 where uid = 1;
Query OK, 1 row affected (0.27 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from points;
+-----+--------+
| uid | points |
+-----+--------+
|   1 |      1 |
|   2 |      0 |
+-----+--------+
2 rows in set (0.00 sec)

经过测试,你确定你进入了你的if (loggedin())条款吗?
我不得不同意KM的观点,如果能看到echo $query1;echo $query2;的输出会很好

2ul0zpep

2ul0zpep2#

下面是示例查询,经过我的测试,它可以100%正常工作

$query="UPDATE table_name SET `hit_count`=(`hit_count`+1) WHERE `id` = '1'";
l7wslrjt

l7wslrjt3#

update table_name set  col_name=col_name+1   where sqId = 12

但是如果你的col_name默认值是null或者空的,那么它永远不会工作,所以确保col_name的默认值是0或者任何整数值。

axzmvihb

axzmvihb4#

update 'tablename' set 'columnname1'='columnname1' + 1 where 'columnname2'='value';

例如:update students set englishmarks=englishmarks + 1 where name='Rahul';
编辑:(说明)“UPDATE”关键字用于更新表中的一个值,这里我更新表“students”中的一个值。“SET”关键字将英语标记更新1(就像在C语言中,我们如何增加一个整数的值,i=i+1),并在name为“Rahul”的地方给出条件。
所以拉胡尔的英语分数加1

eit6fx6z

eit6fx6z5#

在laravel迁移中执行以下操作:

\DB::statement('SELECT @pos:=0;');
\DB::statement('UPDATE users SET company_id = ( SELECT @pos := @pos + 1 ) WHERE `id` = '1';');

如果要更改所有记录,请删除WHERE id = '1'
它将插入数字增量到您的记录,如:

+-----+------------+
|  id | company_id |
+-----+------------+
|   1 |      1     |
|  12 |      2     |
|  23 |      3     |
+-----+------------+

相关问题