【问题标题】:Check if update succeeded and echo [duplicate]检查更新是否成功并回显 [重复]
【发布时间】:2021-10-01 16:39:51
【问题描述】:

我有一个基本的更新查询,如果它成功了,我想回应,所以我尝试了这个的变体

$sql = 'UPDATE storeroom
    SET fruit=?
    WHERE stock_id =?
    AND stock_status <> \'supplied\'';

$stmt = $dbh->prepare($sql);
$stmt->execute($v);

$count = $stmt->rowCount();
}

if ($count < 1) {
echo 'Unknown Stock ID or status change failed.';
}
else {
echo 'Status change successful.';
}

但它在期望资源的 pg_affected_rows 上失败。

我第一次使用 pg_affected rows which I found here

如果我用受影响的行替换 rowcount,我会得到一个不同的错误

【问题讨论】:

  • $dbh 是什么? PDO 连接?
  • 你有没有试过把 $stmt 而不是 $sql 放到 pg_affected_rows($stmt);
  • 请确保您了解 PDO 连接与 pg_ 函数没有任何共同之处。
  • $sql 是一个字符串。请打开手册,阅读。你会看到正确的用法是$stmt-&gt;rowCount()
  • 我们不需要发布另一个rowCount() 答案——我们在 Stack Overflow 上有很多页面可以提供这个建议。

标签: php postgresql


【解决方案1】:

您也可以尝试rowCount 的替代方法 - SQL 语句本身会返回更新的行数。 这是 SQL:

with t as
(
 UPDATE storeroom
    SET fruit = ?
    WHERE stock_id = ?
    AND stock_status <> 'supplied' 
    RETURNING stock_id 
) select count(*) from t;

$sql = <<<SQL
with t as
(
 UPDATE storeroom
    SET fruit = ?
    WHERE stock_id = ?
    AND stock_status <> 'supplied'
    RETURNING stock_id 
) select count(*) from t;
SQL;
$stmt = $dbh -> prepare($sql);
$stmt -> execute($v);
$count = $stmt-> fetchColumn();
...

【讨论】:

    【解决方案2】:

    我认为这可以解决问题,可能取决于我不知道的 PHP 版本:

    $affected = $stmt->affected_rows;
    

    【讨论】:

    • affected_rows 用于mysqli 连接。我们在 cmets 中发现 OP 有 PDO。
    • 我有postgresql
    • 哦,我的错,我错过了它是 PDO
    猜你喜欢
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    相关资源
    最近更新 更多