嗨我有一个MySQL数据库表“点”用户可以点击一个按钮,一个点应该从他们的帐户中删除,他们按下的按钮有另一个用户的ID,因此他们的帐户必须增加一个。
我在jQuery中工作并检查Firebug中的varibles / posts,它确实发送了正确的数据,例如:
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;
}
}
?>
有什么想法吗?谢谢:))
答案 0 :(得分:70)
无需增加/减少字段值的两个查询:
mysql_query("UPDATE table SET field = field + 1 WHERE id = $number");
是一个完全有效的查询,您可以在下面看到:
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;
的输出
答案 1 :(得分:5)
以下是我测试的示例查询,它正在100%工作
$query="UPDATE table_name SET `hit_count`=(`hit_count`+1) WHERE `id` = '1'";
答案 2 :(得分:2)
尝试在if ($result1 && result2)
:
ECHO '$query1='.$query1.'<br>';
ECHO '$query2='.$query2.'<br>';
这将有助于查看它发送到数据库的内容
答案 3 :(得分:1)
update table_name set col_name=col_name+1 where sqId = 12
但是,如果您的col_name
默认值为null或为空,则它永远不会有效,因此请确保col_name
默认值为0
或任何整数值。
答案 4 :(得分:0)
update 'tablename' set 'columnname1'='columnname1' + 1 where 'columnname2'='value';
例如:update students set englishmarks=englishmarks + 1 where name='Rahul';
编辑:(说明) “ UPDATE”关键字用于更新表中的值。在这里,我正在更新“学生”表中的值。 “ SET”关键字将英文标记更新为1(就像在C语言中一样,我们如何增加整数的值,i = i + 1),并且条件为“ Rahul”。
因此Rahul的英文标记加1
答案 5 :(得分:0)
在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 |
+-----+------------+