【问题标题】:RETURNING clause for PostgreSQL UPDATE with PHP/PDO使用 PHP/PDO 的 PostgreSQL UPDATE 的 RETURNING 子句
【发布时间】:2014-12-13 01:46:37
【问题描述】:

我执行一个简单的 postgresql 更新为:

UPDATE data SET Gender=lower(tmp.champs2) 
FROM tmp WHERE data.email=tmp.champs1 
AND (data.Gender IS NULL OR data.Gender='') 
AND tmp.champs2 IS NOT NULL 
AND tmp.champs2!='' 
RETURNING Gender

PostgreSQL 文档说我们可以得到受 RETURNING 子句影响的行数。

但是我怎样才能用 PHP、PDO 得到这个结果呢?

我尝试类似:

echo $requete = "UPDATE data 
    SET ".$value."=lower(tmp.champs".$num.") 
    FROM tmp 
    WHERE data.email=tmp.champs".$email." 
    AND (data.".$value." IS NULL OR data.".$value."='') 
    AND tmp.champs".$num." IS NOT NULL 
    AND tmp.champs".$num."!='' 
    RETURNING ".$value;

    $db->exec($requete);

    $db->fetch(PDO::FETCH_NUM);

    echo $row[0];

没有返回正确的更新行数。

【问题讨论】:

    标签: php sql postgresql pdo


    【解决方案1】:

    根据PDO's doc

    PDO::exec() 在单个函数调用中执行 SQL 语句, 返回受语句影响的行数。

    您当前的代码$db->exec($requete); 忽略了返回值,这是错误的。这应该是例如:

    $affected_rows = $db->exec($requete);
    

    RETURNING 子句不是获取受影响的行数所必需的(此外,它在 PDO 支持的某些后端中不存在)。 RETURNING 的目的是在同一查询中检索除更新之外的行。

    如果需要RETURNING 子句并且必须获取结果,则应使用PDO::query 而不是PDO:exec()。获取结果的 PHP 代码与查询是 SELECT 相同。

    【讨论】:

      【解决方案2】:

      根据你应该使用的文档

      $count = $db->rowCount();
      

      【讨论】:

      • 我收到一个致命错误:调用未定义的方法 PDO::rowCount()
      • 你应该有你的 PDO 对象而不是 $db。你没有 $db = new PDO("pgsql:dbname=pdo;host=localhost", "username", "password" );
      猜你喜欢
      • 2021-03-25
      • 2011-02-17
      • 2018-10-05
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多