INSERT z SELECTem jako prepare |
INSERT z SELECTem jako prepare |
18.01.2021, 21:47:48
Post
#1
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 21.12.2007 Skąd: Stalowa Wola Ostrzeżenie: (0%) |
Czy istnieje możliwość przygotowania takiego zapytania jako prepare i bind_param:
Nie mam pojęcia, jak ująć ten SELECT. |
|
|
18.01.2021, 22:27:31
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
A jak chcesz inaczej ująć? Zapytanie jest poprawne, wystarczy bindować wartości.
P.S. YEAR((nr_daty)) tu nie jest potrzebny podwójny nawias. A zamiast YEAR(NOW()) warto również bindować rok. -------------------- |
|
|
19.01.2021, 00:56:50
Post
#3
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 21.12.2007 Skąd: Stalowa Wola Ostrzeżenie: (0%) |
Dziękuję, faktycznie nie zauważyłem tych podwójnych nawiasów. Co do bindowania, nie bardzo mam doświadczenie, mógłbym prosić o podpowiedź? Obecne zapytanie działa, ale wszędzie pisze, żeby bindować bo to bezpieczniejsze. Czy coś takiego będzie poprawne:
|
|
|
19.01.2021, 09:25:55
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
A sprawdzałeś? To najlepsza metoda nauki.
P.S. Jeśli wcześnie używałeś zmiennej $stmt, to pewnie tu też powinieneś. -------------------- |
|
|
20.01.2021, 01:13:35
Post
#5
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 21.12.2007 Skąd: Stalowa Wola Ostrzeżenie: (0%) |
Niestety, otrzymuję komunikat o błędzie: Call to a member function bind_param() on boolean in /var/www/html... próbowałem zmienić z "i" na "s", też nic.
|
|
|
20.01.2021, 08:00:19
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Czyli mówi ci to że prepare zwróciło false. Masz w ogóle połączenie z bazą?
-------------------- |
|
|
20.01.2021, 08:20:21
Post
#7
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 21.12.2007 Skąd: Stalowa Wola Ostrzeżenie: (0%) |
Tak, tu na pewno jest wszystko w porządku, bo robię to w transakcji. Pierwsze zapytanie - prosty insert, też z prepare - przechodzi, natomiast tu daje błąd. Czy ta moja składnia zapytania jest poprawna? Bo tu właśnie mam wątpliwości.
w "zwykłym" zapytaniu nie miałem VALUES i działało:
Dlatego właśnie napisałem, że nie do końca rozumiem jeszcze 'prepare' przy takim złożonym zapytaniu. |
|
|
20.01.2021, 08:23:02
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
A nazwa zmiennej to $smtp czy $stmt?
-------------------- |
|
|
20.01.2021, 08:23:07
Post
#9
|
|
Grupa: Zarejestrowani Postów: 531 Pomógł: 55 Dołączył: 3.01.2016 Skąd: Łowicz Ostrzeżenie: (0%) |
masz
INTO numery (numer, gid, mid) Czy przekazujesz prawidłowe typy zmiennych do tych 3 pól? -------------------- Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
|
|
|
20.01.2021, 11:38:41
Post
#10
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 21.12.2007 Skąd: Stalowa Wola Ostrzeżenie: (0%) |
A nazwa zmiennej to $smtp czy $stmt? - źle przepisałem, przepraszam, nazwy zmiennych mam poprawne.
Czy przekazujesz prawidłowe typy zmiennych do tych 3 pól? - no i tu chyba jest mój problem, bo preparuję niejako dwie ostatnie zmienne, trzecią powinien brać z SELECTa, ale chyba źle skonstruowałem zapytanie. Natomiast tamte dwie próbowałem już jako integer i jako string, niestety ten sam błąd. |
|
|
20.01.2021, 11:45:38
Post
#11
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
INSERT INTO numery (numer,gid,mid) VALUES (SELECT IFNULL(MAX(numer), 0)+1 FROM numery WHERE YEAR(nr_daty) = YEAR(NOW()),?,?)
P.S. Bardzo prawdopodobne, że trzeba też dodać alias do tabeli w podzapytaniu SELECT. Ten post edytował trueblue 20.01.2021, 11:48:02 -------------------- |
|
|
20.01.2021, 23:02:12
Post
#12
|
|
Grupa: Zarejestrowani Postów: 38 Pomógł: 0 Dołączył: 21.12.2007 Skąd: Stalowa Wola Ostrzeżenie: (0%) |
Zadziałało w końcu w takiej formie:
czyli bez VALUES (czego do końca akurat nie rozumiem). W każdym bądź razie działa, dziękuję kolegom za pomoc. EDIT: A jeszcze jedno pytanie - czy przy "zwykłym" SELECT też używać bindowania, czy np. tylko wtedy, jeśli w zapytaniu mam zmienną pobraną z formularza? Ten post edytował Jdwind 20.01.2021, 23:56:48 |
|
|
Wersja Lo-Fi | Aktualny czas: 24.04.2024 - 12:33 |