Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: UPDATE/INSERT
Forum PHP.pl > Forum > Bazy danych > MySQL
Ania-678
Witam Serdecznie.

Mam tabelkę typu MEMORY do której robię update'a i jeśli wywołane mysql_affected_rows zwróci 0 to leci insert:

  1. <?php
  2. mysql_query('UPDATE table SET pole1="cos_tam", pole2="cos_tam_2" WHERE id="cos_tam3"');
  3.  
  4.  
  5. if($fail == 0)
  6. {
  7.    mysql_query('INSERT INTO table (id, pole1, pole2) VALUES ("cos_tam3", "cos_tam", "cos_tam_2")');
  8. }
  9. ?>


Problem jest taki że wartości w update mogą być takie same co w bazie przez co mysql_affected_rows zwraca 0 i leci insert dry.gif

Nawet pisze w manualu -> http://pl2.php.net/manual/pl/function.mysq...fected-rows.php

Cytat
Podczas operacji UPDATE, MySQL nie aktualizuje kolumn w których nowa wartość jest identyczna z poprzednią. Możliwe jest zatem, że zwrócona przez mysql_affected_rows() liczba nie będzie odpowiadać liczbie wierszy pasujących do zapytania, ale tych, które zostały faktycznie zmienione.


Pytanie jak to ominąć? Czy może dać UNIQUE INDEX na pole id ? (nie jest ono primary keyem)
nospor
http://dev.mysql.com/doc/refman/5.0/en/ins...-duplicate.html

Cytat
Czy może dać UNIQUE INDEX na pole id
id powinno byc kluczem glownym wiec z zalozenia musi byc unikatowe
Ania-678
Jest jeszcze pole lp które jest primary keyem.
nospor
a czemu nie moze byc nim id? Skoro juz masz id to warto z niego korzystac
Ania-678
W sumie to może laugh.gif I już nawet nim jest, tyle że wciąż nie rozwiązuje to problemu bo jak leci insert na istniejący już rekord z takim id to dostaje wesoły errorek...
nospor
przeciez podalem ci rozwiązanie. czytaj uwaznie posty innych
http://dev.mysql.com/doc/refman/5.0/en/ins...-duplicate.html

walisz tylko tego inserta z linka powyzej. On ma w sobie tez update
Ania-678
Już zrobione. Dziękuję winksmiley.jpg
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.