Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysqli] delete i insert w jednym zapytaniu
Forum PHP.pl > Forum > PHP
vadergb
Witam,

Mam taki problem: chce polaczyc zapytanie insert i delte w jednym (aby nie wykonywac 2 zapytan - chce zmniejszych ilosc zapytan):

i mam:

  1. $sql_login = $this->mysqli->prepare ( "delete from users_email where user_id='$_SESSION[user_id]';insert into users_email(user_id,email,code,status,date) values('$_SESSION[user_id]',?,?,1,'".dnow."')" );
  2. $sql_login->bind_param ( "ss", $email,$code_active );
  3. $sql_login->execute ();
  4. $exist=$sql_login->affected_rows;
  5. $sql_login->close ();


Tylko cos to mi nie chce dzialac...

Blad jaki sie wyswietla:
<b>Fatal error</b>: Call to a member function bind_param()

I zastanawiam sie czy istnieje mozliwosc polaczenia 2 zapytan takich w jedno za pomoca mysqli?

Jesli tak prosilbym o podanie przykladu.
kipero
Z tego co wiem to w MySQL nie ma możliwości wykonywania dwóch zapytań jednocześnie. W Twoim przypadku może przydać się: http://dev.mysql.com/doc/refman/5.0/en/replace.html
prachwal
zrób sobie procedurę
http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html
f1xer
Cytat(vadergb @ 30.08.2009, 15:30:41 ) *
aby nie wykonywac 2 zapytan - chce zmniejszych ilosc zapytan

delete from users_email where user_id='$_SESSION[user_id]';insert into users_email(user_id,email,code,status,date)


Nie wiem czy zdajesz sobie z tego sprawę ale to że zapiszesz w jednej linii komendy, to nie oznacza że nie wykonujesz dwóch zapytań. Poza tym tak na "chłopski rozum" to jak by to miało działać?? pisząc tak nie jesteś wstanie uzyskać odpowiedzi bazy mysql (bo jak wystąpi błąd to skąd wiesz w którym zapytaniu?), a przez to nie wyłapiesz poprawnie błędu. Jak chcesz optymalizować komunikację z DB to zacznij od optymalizacji takich kwiatków w kodzie, które np. wykonują 2 selecty a dało by się jednym.
Rookie
Nie wiem zabardzo czy to w tym przypadku zadziała, ale może by można tak:
  1. INSERT INTO users_email(user_id,email,code,STATUS,date) UNION DELETE FROM users_email WHERE user_id='$_SESSION[user_id]';
franki01
UNION to łączenie kilku tablic z wynikami z SQLa. Tu nie pomoże.

MySQL nie pozwala na wykonanie dwóch osobnych zapytań do bazy danych za jednym razem (jednokrotne użycie mysql(i)_query albo przez PDO). Jak prachwal wspomniał, możesz zrobić sobie procedurę, ale nie czyni to kodu bardziej wydajnym. Zostaje wykonanie dwóch osobnych zapytań. Jednak w Twoim przypadku wygląda na to, że możesz użyć UPDATE zamiast usuwać i tworzyć nowy rekord o, podejrzewam, tym samym kluczu. Może jest w tym jakiś ukryty cel - nie wiem.
Rookie
Na przyszłość będę wiedział franki01 smile.gif
vadergb
Cytat(franki01 @ 31.08.2009, 01:03:21 ) *
UNION to łączenie kilku tablic z wynikami z SQLa. Tu nie pomoże.

MySQL nie pozwala na wykonanie dwóch osobnych zapytań do bazy danych za jednym razem (jednokrotne użycie mysql(i)_query albo przez PDO). Jak prachwal wspomniał, możesz zrobić sobie procedurę, ale nie czyni to kodu bardziej wydajnym. Zostaje wykonanie dwóch osobnych zapytań. Jednak w Twoim przypadku wygląda na to, że możesz użyć UPDATE zamiast usuwać i tworzyć nowy rekord o, podejrzewam, tym samym kluczu. Może jest w tym jakiś ukryty cel - nie wiem.


To byl przyklad nie koniecznie ma zwiazego z rzeczywistoscia - wiec tu nie chodzi o sens zapytan:P

Hmm co do laczenia 2 selectow w 1 tak robie (pisze nowa aplikacje wiec chce zrobic wszystko jak najbardziej wydajne).

Chodzilo mi tylko o poprawienie wydajnosci nie o kolejne bezsensowne procedury. Jesli sie nie da trudno - przynajmniej wiem teraz ze nie moge tego bardziej zoptymalizowac - thx za pomoc.

pozdrawiam
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.