我已經寫在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
解決方案。 。我注意到查詢返回一列,但你似乎正在閱讀其中的很多。 –