Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z zapytaniem SQL gdy jest w nim średnik
tzar
post 9.12.2015, 07:51:58
Post #1





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 17.11.2015

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


Mam takie zapytanie:

  1. $sql = "INSERT INTO `m` ( `id` , `tytul`) VALUES ( '', '$tytul');";


Jeśłi w tytule jest średnik (angielski tytuł) '... can't' to wiadomo wywala błąd. Próbowałem zamienić na " :

  1. VALUES ( '', "$tytul");";


Wtedy dodaje mi do bazy zamiast tytułu po prostu nazwę smiennej $tytul. Jak usunę całekim cudzysłowy to też jest lipa.
Próbowałem je jakoś escapować w stylu \"$tytul\", ale to też nie działa.

Jak w takim razie to przerobić, żebym mógł dodawać angieslkie stringi do bazy zawierające średnik ' ?
Go to the top of the page
+Quote Post
viking
post 9.12.2015, 07:59:49
Post #2





Grupa: Zarejestrowani
Postów: 6 376
Pomógł: 1116
Dołączył: 30.08.2006

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


Korzystać z bindowania parametrów dla nowoczesnych rozwiązań.
Pewnie używasz mysql_query wiec mysql_real_escape_string.


--------------------
Go to the top of the page
+Quote Post
tzar
post 9.12.2015, 13:48:49
Post #3





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 17.11.2015

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


  1. $sql = "INSERT INTO `m` ( `id` , `tytul`) VALUES ( '', '$tytul_ogolny' , mysql_real_escape_string($tytul_ogolny));";


Tak to ma wyglądać ?
Mi to nie działa (moje zapytanie jest dużo dłuższe więc podaje takie jako przykład, no ale nie za bardzo.

Są jakieś inne sposoby ?

Ten post edytował tzar 9.12.2015, 13:49:05
Go to the top of the page
+Quote Post
viking
post 9.12.2015, 13:57:18
Post #4





Grupa: Zarejestrowani
Postów: 6 376
Pomógł: 1116
Dołączył: 30.08.2006

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


Tak, tylko w przykładzie podałeś 2 kolumny i 3 wartości. Klucz główny w takim wypadku pomijaj i bo i tak jest autoincrement pewnie.


--------------------
Go to the top of the page
+Quote Post
tzar
post 9.12.2015, 14:03:31
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 17.11.2015

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


Wywala pełno błędów, dla przykładu:

  1. INSERT INTO `m` ( `id` , `tytul`) VALUES ( '', 'Danish Symphony', mysql_real_escape_string(Danish Symphony));


5 errors were found during analysis.

A comma or a closing bracket was expected (near "(" at position 101)
Unexpected token. (near "Danish" at position 102)
Unexpected token. (near "Symphony" at position 109)
Unexpected token. (near ")" at position 117)
Unexpected token. (near ")" at position 118)

MySQL zwrócił komunikat: Dokumentacja
#1584 - Incorrect parameters in the call to stored function 'mysql_real_escape_string'
Go to the top of the page
+Quote Post
viking
post 9.12.2015, 14:14:08
Post #6





Grupa: Zarejestrowani
Postów: 6 376
Pomógł: 1116
Dołączył: 30.08.2006

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


Masakra, skup się.
  1. $sql = 'INSERT INTO m (tytul) VALUES ( "%s" )';


https://wwwgo.pl/advice/show/3/korzystam_z_...ed._dlaczego%3F

Ten post edytował viking 9.12.2015, 14:15:13


--------------------
Go to the top of the page
+Quote Post
tzar
post 9.12.2015, 15:40:55
Post #7





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 17.11.2015

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


Nie wiem, mi to nie działa:
  1. $tytul="ddd'ddd";
  2. $sql = "INSERT INTO `m` ( `id` , `tytul`) VALUES ( '', '$tytul');";
  3. $dodaj = mysql_query($sql);


echo wyświetla:
  1. INSERT INTO `m` ( `id` , `tytul`) VALUES ( '', 'ddd'ddd');

więc nic się nie zmienia...

Ten post edytował tzar 9.12.2015, 15:44:35
Go to the top of the page
+Quote Post
nospor
post 9.12.2015, 15:47:06
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




facepalmxd.gif
Dostales dokladny kod jakiego masz uzyc i to nie potrafisz skopiowac :/


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

"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
tzar
post 9.12.2015, 15:51:38
Post #9





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 17.11.2015

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


Jak robię:
$sql = "INSERT INTO `m` ( `tytul`) VALUES ( '%s');";
To w bazie mam %s, więc uznałem że to błąd...

Co w sumie jest dziwne, bo echo już wyświetla się poprawnie i jak wkleję do myadmina kod:
INSERT INTO `movie_test_3` ( `tytul`) VALUES ( 'ddd\'ddd');
to się dodaje, jednak to zapytanie bezpośrednio dodaje mi %s

Spróbuję zmienić cudzysłowy...

Ten post edytował tzar 9.12.2015, 15:53:56
Go to the top of the page
+Quote Post
nospor
post 9.12.2015, 15:55:39
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Wynik sprintf() masz ponownie zapisac do zmiennej $sql i to przed wykonaniem zapytania.


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

"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
tzar
post 9.12.2015, 15:57:23
Post #11





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 17.11.2015

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


Teraz gra, dzięki smile.gif
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: 19.05.2025 - 09:09