Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Blad skladniowy SQL
q.michal
post 5.08.2017, 09:17:59
Post #1





Grupa: Zarejestrowani
Postów: 111
Pomógł: 1
Dołączył: 24.12.2013

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


Czesc,

Nie jestem orlem jezeli chodzi o SQL i nie potrafie rozwizac bledu skladniowego...
Wymodzilem takiego SQLa:

  1. $stmt = $db->prepare('IF EXISTS(SELECT id FROM records WHERE name = ? AND disabled = ? AND type = ? LIMIT 1)' .
  2. '(UPDATE records SET content = ? WHERE name = ? AND disabled = ? AND type = ? LIMIT 1)' .
  3. '(INSERT INTO records(id, domain_id, name, type, content, ttl, prio, change_date, disabled) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?))');



I dostaje blad 42000 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(UPDATE records SET content = 'XXXXXXXX' WHER' at line 1

Czy ktos jest w stanie wytlumaczyc mi gdzie tu jest blad?
Go to the top of the page
+Quote Post
trueblue
post 5.08.2017, 09:20:14
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Zobacz czy zapytania nie możesz zastąpić: https://www.google.com/search?q=mysql+inser...uplicate+update


--------------------
Go to the top of the page
+Quote Post
q.michal
post 5.08.2017, 21:04:21
Post #3





Grupa: Zarejestrowani
Postów: 111
Pomógł: 1
Dołączył: 24.12.2013

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


Nie moge bo unikalnym kuczem jest ID wpisu. A ja musze dodac albo zaktualizowac wpis, w zaleznosci od tego nazwy i typu rekordu.
Jest to zwykly DNS z backendem w MySQLu
Go to the top of the page
+Quote Post
trueblue
post 5.08.2017, 21:28:05
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


ON DUPLICATE dotyczy również kluczy unikalnych, a jeśli nie: https://stackoverflow.com/a/12639536


--------------------
Go to the top of the page
+Quote Post
q.michal
post 6.08.2017, 05:29:08
Post #5





Grupa: Zarejestrowani
Postów: 111
Pomógł: 1
Dołączył: 24.12.2013

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


W DNSie nie ma unikalnych wpisow... mozesz zrobic load-balancing (RoundRobin) dodajac wiele takich samych wpisow o roznym kontencie.

Po zmianie dostaje teraz taki blad:


You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ELSE INSERT INTO records(id, domain_id, name, type, content, ttl, prio, change_d' at line 1

Ten post edytował q.michal 6.08.2017, 05:34:05
Go to the top of the page
+Quote Post
nospor
post 7.08.2017, 18:10:13
Post #6





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




Cytat
Po zmianie dostaje teraz taki blad:
Jesli zmieniasz kod i masz inny blad to domysl sie, ze nalezy pokazac caly zmieniony kod. My nie wrozki, nie wiemy na co zmieniles...


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
q.michal
post 7.08.2017, 19:07:00
Post #7





Grupa: Zarejestrowani
Postów: 111
Pomógł: 1
Dołączył: 24.12.2013

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


Zmienilem tak jak w linku zapodanym przez trueblue.
Tak czy inaczej juz wiem gdzie jest problem.

IF EXISTS dziala tylko w funkcjach i procedurach
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: 25.04.2024 - 19:10