我已经写在PostgreSQL这个UPSERT查询在PHP PDO如何让“回归”的PostgreSQL子句值UPSERT查询
$statement = 'INSERT INTO "CharactersUnlockToBuyLevels"
("CharacterId", "LevelId", "AmountToBuy", "EagleStatueId", "Location",
"MapCoordinateTop", "MapCoordinateLeft")
VALUES
(:CharacterId, :LevelId, :AmountToBuy, :EagleStatueId, :Location,
:MapCoordinateTop, :MapCoordinateLeft)
ON CONFLICT
("CharacterId")
DO UPDATE
SET
"LevelId" = EXCLUDED."LevelId",
"AmountToBuy" = EXCLUDED."AmountToBuy",
"EagleStatueId" = EXCLUDED."EagleStatueId",
"Location" = EXCLUDED."Location",
"MapCoordinateTop" = EXCLUDED."MapCoordinateTop",
"MapCoordinateLeft" = EXCLUDED."MapCoordinateLeft"
RETURNING "CharacterUnlockToBuyLevelId"
';
查询工作正常,如果我在pgAdmin的运行它,我得到了“ CharacterUnlockToBuyLevelId“回到预期状态。但是,如果我准备并使用PHP的PDO执行它,那么我似乎无法获得RETURNING值。
$stmt = $this->db->prepare($statement);
$returnedId = $stmt->execute(array(
'CharacterId' => $characterId,
'LevelId' => $unlockMethod['LevelId'],
'AmountToBuy' => $unlockMethod['AmountToBuy'],
'EagleStatueId' => $unlockMethod['EagleStatueId'],
'Location' => $unlockMethod['Location'],
'MapCoordinateTop' => $unlockMethod['MapCoordinateTop'],
'MapCoordinateLeft' => $unlockMethod['MapCoordinateLeft'],
));
这只是返回true,所以$returnedId
不会实际持有的ID,但只值true。如何使用PDO准备好的语句从upsert查询中获取RETURNING值?
你试过用'我(...)选择i。* from i'? –
这可以工作,但我想保持我的查询尽可能干净,而不是建立额外的周围它只是为了得到一个价值回来,它已被返回,并寻找PHP PDO – Pascale
解决方案。 。我注意到查询返回一列,但你似乎正在阅读其中的很多。 –