Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysqli] delete i insert w jednym zapytaniu, [mysqli] delete i insert w jednym zapytaniu
vadergb
post 30.08.2009, 14:30:41
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 10.06.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
kipero
post 30.08.2009, 14:44:28
Post #2





Grupa: Zarejestrowani
Postów: 233
Pomógł: 50
Dołączył: 28.10.2006
Skąd: Radom

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
prachwal
post 30.08.2009, 14:46:47
Post #3





Grupa: Zarejestrowani
Postów: 171
Pomógł: 18
Dołączył: 13.03.2009
Skąd: lublin

Ostrzeżenie: (0%)
-----


zrób sobie procedurę
http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html
Go to the top of the page
+Quote Post
f1xer
post 30.08.2009, 17:10:24
Post #4





Grupa: Zarejestrowani
Postów: 403
Pomógł: 68
Dołączył: 20.03.2008

Ostrzeżenie: (0%)
-----


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.


--------------------
Pomogłem? wyraź to i kliknij "Pomógł"
Go to the top of the page
+Quote Post
Rookie
post 30.08.2009, 23:37:12
Post #5





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


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]';


Ten post edytował Rookie 30.08.2009, 23:37:44
Go to the top of the page
+Quote Post
franki01
post 31.08.2009, 00:03:21
Post #6





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Rookie
post 31.08.2009, 00:17:27
Post #7





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 1.03.2008
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Na przyszłość będę wiedział franki01 smile.gif
Go to the top of the page
+Quote Post
vadergb
post 31.08.2009, 08:40:02
Post #8





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 10.06.2009

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 17:22