Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: ZAJDAN 15. 04. 2019, 18:05:33

Název: PHP PDO - SQL Update
Přispěvatel: ZAJDAN 15. 04. 2019, 18:05:33
Ahoj,
poradil by někdo jak nejlépe provést Update záznamu, který je použit v klausuli WHERE ...?
Kód: [Vybrat]
      $prepared = $pdo->prepare("UPDATE prodlist SET
      Commission = :Commission,
      Letter = :Letter,
      DeliveryDate = :DeliveryDate,
      Status = :Status,
   WHERE Commission = :Commission");
      $prepared->execute([
    'Commission' => $UpdateDecoded["Commission"],
    'Letter' => $UpdateDecoded["Letter"],
    'DeliveryDate' => $UpdateDecoded["DeliveryDate"],
    'Status' => $UpdateDecoded["Status"],
  ]);
pokud ve formuláři změním input Commission a updatnu ho, tak se logicky začně provádět WHERE něčeho co ještě neexistuje.
Název: Re:PHP PDO - SQL Update
Přispěvatel: ZAJDAN 15. 04. 2019, 18:15:50
typuju ze do WHERE bude potřeba zadat uniq key který se nemění
Název: Re:PHP PDO - SQL Update
Přispěvatel: to_je_jedno 15. 04. 2019, 19:13:09
1) kdyz to neexistuje tak se to nemuze updatovat
2) WHERE nepotrebuje nutne unique key, to bys musel pak delat update po jednom zaznamu
3) dal jsi nam prilis malo informaci. nejaky ID(auto increment) by se tam hodil, ale nemusi tomu tak byt vzdy. nebo si proste pridej do formulare hidden field old_commission a ten dej do where (ovsem muze to mit negativni dopad na security)
Název: Re:PHP PDO - SQL Update
Přispěvatel: Ondrej Nemecek 15. 04. 2019, 21:17:50
Pokud záznam neexistuje, musíte ho nejdřív vložit pomocí INSERT, teprve pak ho můžete změnit pomocí UPDATE. Pokud chcete aktualizovat jen jednu konrétní položku, zavoláte UPDATE a v části WHERE uvedete primární klíč. To je typické použití. Chcete-li něco konkrétnějšího, uveďte alespoň strukturu databáze...
Název: Re:PHP PDO - SQL Update
Přispěvatel: Onehalf 15. 04. 2019, 21:27:53
Ahoj,
poradil by někdo jak nejlépe provést Update záznamu, který je použit v klausuli WHERE ...?
Co takhle?
Kód: [Vybrat]
      $prepared = $pdo->prepare("UPDATE prodlist SET
      Commission = :Commission,
      Letter = :Letter,
      DeliveryDate = :DeliveryDate,
      Status = :Status,
   WHERE Commission = :OriginalCommission");
      $prepared->execute([
    'Commission' => $UpdateDecoded["Commission"],
    'OriginalCommission' => $UpdateDecoded["OriginalCommission"],
    'Letter' => $UpdateDecoded["Letter"],
    'DeliveryDate' => $UpdateDecoded["DeliveryDate"],
    'Status' => $UpdateDecoded["Status"],
  ]);
Název: Re:PHP PDO - SQL Update
Přispěvatel: ZAJDAN 16. 04. 2019, 10:55:44
díky za podněty...
naznal jsem, že nejlepší bude v databázi vytvořiit sloupec ID a na něm AutoIncrement
a Update provádět přes tento ID, který se nikdy nezmění
Název: Re:PHP PDO - SQL Update
Přispěvatel: ETNyx 16. 04. 2019, 11:31:43
Případně je teoreticky možné využít konstrukcí: INSERT ON DUPLICATE KEY UPDATE

Takto nebude nutné mít dva dotazy pro insert a update
Název: Re:PHP PDO - SQL Update
Přispěvatel: Kit 16. 04. 2019, 12:03:35
naznal jsem, že nejlepší bude v databázi vytvořiit sloupec ID a na něm AutoIncrement
a Update provádět přes tento ID, který se nikdy nezmění

Ti tam ten sloupeček s ID nemáš? To je docela zásadní nedostatek.
Název: Re:PHP PDO - SQL Update
Přispěvatel: BoneFlute 16. 04. 2019, 14:52:17
díky za podněty...
naznal jsem, že nejlepší bude v databázi vytvořiit sloupec ID a na něm AutoIncrement
a Update provádět přes tento ID, který se nikdy nezmění

Použití ID je takové klasické řešení, ale není úplně nutné. To, jak to popsal @Onehalf přesněji řeší tvůj problém.
Název: Re:PHP PDO - SQL Update
Přispěvatel: ZAJDAN 16. 04. 2019, 15:49:29
díky hoši...řešení zmíněné od @Onehalf  je minimálně dobré mít v povědomí, pokusím se ho i nasadit z laboratorních důvodů :_)