Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Problem z ON DUPLICATE KEY UPDATE
Forum PHP.pl > Forum > Przedszkole
Jertvb
Mam problem z ON DUPLICATE KEY UPDATE. Gdy dodaję rekord i potem usuwam w kodzie z nim INSERT i dodaję nową wartość z ON DUPLICATE KEY UPDATE to nie nadpisuje kompletnie. To jest z wikibooks.org:

  1. <?php
  2.  
  3. mysql_connect ('127.0.0.1','root','krasnal');
  4.  
  5.  
  6. $base= "CREATE TABLE `slownik` (
  7. `id` MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  8. `haslo` VARCHAR(40) NOT NULL,
  9. `znaczenie` VARCHAR(255) NOT NULL,
  10. UNIQUE(
  11.  `haslo` 
  12. )
  13. ) TYPE = MYISAM;";
  14.  
  15.  
  16. $records= "INSERT INTO slownik (haslo, znaczenie) VALUES('house', 'dom (budynek), rodzaj obiektu mieszkalnego.')
  17. ON DUPLICATE KEY UPDATE znaczenie=VALUES(znaczenie);";
  18.  
  19. mysql_query($base);
  20. mysql_query($records);
  21. ?>
tomeksobczak
spróbuj tak

  1. <?php
  2. $records= "INSERT INTO slownik (haslo, znaczenie) VALUES('house', 'dom (budynek), rodzaj obiektu mieszkalnego.')
  3. ON DUPLICATE KEY UPDATE znaczenie='dom (budynek), rodzaj obiektu mieszkalnego.';";
  4. ?>


no i nie twórz tabeli za każdym razem
  1. <?php
  2. mysql_query($base);
  3. ?>
nevt
kod który pokazałeś (przykładowy) jest prawidowy i działa zgodnie z oczekiwaniami. pokaż SWÓJ PRAWDZIWY kod i opisz dokładnie co ci w nim nie działa... bo stwierdzenia, że:
Cytat
Gdy dodaję rekord i potem usuwam w kodzie z nim INSERT i dodaję nową wartość z ON DUPLICATE KEY UPDATE to nie nadpisuje kompletnie.

nie rozumiem kompletnie... szczególnie wytłuszczonego fragmentu...
Jertvb
Chodzi mi o to że jak są rekordy house a później dom (budynek) to żeby to zostało nadpisane, ale żeby nie było z innym id tylko z tym samym czyli zastosowanie ON DUPLICATE KEY UPDATE tu jest potrzebne no i żeby zostało nadpisane żeby było house a później dom (budynek), rodzaj obiektu mieszkalnego tylko w tym samym rekordzie a nie jak przy Replace że usuwa stary rekord i dodaje nowy ale o innym id. Cały kod:

  1. <?php 
  2.  
  3. mysql_connect ('127.0.0.1','root','krasnal');
  4.  
  5.  
  6. $base= "CREATE TABLE `slownik` (
  7. `id` MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  8. `haslo` VARCHAR(40) NOT NULL,
  9. `znaczenie` VARCHAR(255) NOT NULL,
  10. UNIQUE(
  11.  `haslo` 
  12. )
  13. ) TYPE = MYISAM;";
  14.  
  15.  
  16. $record= "INSERT INTO `slownik` 
  17. (`haslo`, `znaczenie`) VALUES('house', 'dom (budynek)');";
  18.  
  19. $records= "INSERT INTO slownik (haslo, znaczenie) VALUES('house', 'dom (budynek), rodzaj obiektu mieszkalnego.')
  20. ON DUPLICATE KEY UPDATE znaczenie=VALUES(znaczenie);";
  21.  
  22. mysql_query($base);
  23. MYSQL_query($record);
  24. mysql_query($records);
  25.  
  26. ?>
nevt
napisz dokładnie jakie dostajesz wyniki po wykonaniu tego skryptu... i dlaczego według ciebie są złe... skopiowałem i wkleiłem twój kod SQL u siebie do bazy i wszystko działa ok... tzn. na końcu mam wpis w bazie:

1, 'house', 'dom (budynek), rodzaj obiektu mieszkalnego.'

możliwe że chcesz osiągnąć coś do czego ON DUPLICATE KEY nie służy...
Jertvb
Już wiem czemu update nie robi. Ja jadę na krasnalu 2.7 który nie obsługuje mysql powyżej wersji 4 a to zostało dodane w wersji 4,xx . Spróbuję na innym serwerze. smile.gif
aogon
Nawiązując do tematu - czy "ON DUPLICATE KEY UPDATE" mogę użyć przy UPDATE, czy tylko przy INSERT?
erix
Tylko przy INSERT. Przeanalizuj całą konstrukcję - wywoływany jest najpierw INSERT, a jeśli dane ustawionego klucza istnieją, wtedy wykonywany jest UPDATE.
aogon
Ok, dzięki! Mam akurat sytuację, w której update może podmienić wpis na podówjny i wtedy jak znalazł byłaby metoda ON DUPLICATE KEY UPDATE. Ale cóz. pokombinuję inaczej. Dzięki raz jeszcze.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.