mysql - 增加 MySQL 列并获得结果

标签 mysql pdo

是否可以递增 MySQL 列并在单个查询中获得结果?如果是这样,它如何以及比在两个查询中更有效?请注意,version 不是自增列。

    $stmt=$this->pdo->prepare('UPDATE source_clients SET version=version+1 WHERE guid=?');
    $stmt->execute([$guid]);
    $stmt=$this->pdo->prepare('SELECT version FROM source_clients WHERE guid=?');
    $stmt->execute([$guid]);
    $version=$stmt->fetchColumn();

最佳答案

给自己一个好的 wrapper 。它将减少重复代码,使您的代码有效地看起来就像是一次调用中的两个查询。

$this->pdo->run('UPDATE source_clients SET version=version+1 WHERE guid=?',[$guid]);
$version=$this->pdo->run('SELECT version FROM source_clients WHERE guid=?',[$guid])
         ->fetchColumn();

以上方法来 self 的simple PDO wrapper

但实际上,您可以使用 PDO 在一次调用中运行这两个查询。

如果您打开仿真模式,则很有可能。然而,它不会使您的代码更短:

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$sql = 'UPDATE source_clients SET version=version+1 WHERE guid=:guid;
        SELECT version FROM source_clients WHERE guid=:guid';
$stmt=$this->pdo->prepare($sql);
$stmt->execute(['guid' => $guid]);
$stmt->nextRowset();
$version = $stmt->fetchColumn();

我怀疑这种方法是否值得麻烦。
更多信息你可以在我的PDO tutorial的相应部分找到

关于mysql - 增加 MySQL 列并获得结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41284411/

相关文章:

php - 使用 PDO bindParam 创建数据库

mysql PDO和存储过程动态SQL注入(inject)

mysql - 在 mysql 的触发器中调用函数

php - phpMyadmin 中的最大执行时间

mysql - 如何获取查询的列名

php - 取日期和时间的两个变量并组合成一个日期

PHP - MySQL 到 PDO

php - MySql 和 ADODB5 - 最大连接数

php - mysql无法执行user_id

mysql - 如何选择多个表 Spring Data JPA/Jhipster