我执行一个简单的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];
不会返回更新的正确行数。
答案 0 :(得分: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
的相同。
答案 1 :(得分:-1)
根据文档,你应该使用
$count = $db->rowCount();