Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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_Sql_Codeigniter - Fatal编程技术网

Php 在mysql中运行更新查询后返回更新后的值

Php 在mysql中运行更新查询后返回更新后的值,php,mysql,sql,codeigniter,Php,Mysql,Sql,Codeigniter,如果这个问题看起来奇怪和愚蠢,我很抱歉,但我需要知道这是否可能,或者是什么 所以 我有以下查询,用于更新requests表中请求记录的状态 $updateQ = "UPDATE requests SET status = status+1 WHERE rid = '$rid'"; if($this->db->query($updateQ)) return $this->db->select('status')->from('requests')->wh

如果这个问题看起来奇怪和愚蠢,我很抱歉,但我需要知道这是否可能,或者是什么

所以 我有以下查询,用于更新requests表中请求记录的状态

$updateQ = "UPDATE requests SET status = status+1 WHERE rid = '$rid'";
if($this->db->query($updateQ))
    return $this->db->select('status')->from('requests')->where('rid', $rid)->get()->row('status');

我想知道在执行查询后,是否可以在不运行另一个select查询的情况下立即获取更新的状态字段的值。

不,您不能。我不明白,你为什么要担心。我猜,
rid
是你的主键。因此,之后的
SELECT应该非常快,以至于您几乎不会注意到它。

您应该使用SELECT FOR UPDATE(对于mySQL)或类似的工具来实现更新和选择最后一个值的原子性

SELECT counter_field FROM child_codes FOR UPDATE;
UPDATE child_codes SET counter_field = counter_field + 1;
或者,如果您希望获取更新的上次插入ID,请使用
LAST\u INSERT\u ID()

UPDATE counters
SET value = LAST_INSERT_ID(value) + 1
WHERE id = 1;
然后

SELECT LAST_INSERT_ID();
通读

谢谢,
K

不,您无法获取它,在更新之后,您只能获取受影响的行,即跨国数据库中的
1
,在您确保它被更新之前,这是不可靠的atomic@karmendra我觉得你把这里的事情弄糊涂了。问题是,他是否可以在不运行另一个select查询的情况下获得更新的值。这与值是否被另一个事务再次更改无关。事实上所以我的答案没有错。好吧,我同意,但在你编辑你的答案之前,我无法收回我的反对票。这通常是很好的信息,但在这种情况下并不是必要的。无论如何,投票吧。