Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z zapytaniem SQL gdy jest w nim średnik
Forum PHP.pl > Forum > Przedszkole
tzar
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 ' ?
viking
Korzystać z bindowania parametrów dla nowoczesnych rozwiązań.
Pewnie używasz mysql_query wiec mysql_real_escape_string.
tzar
  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 ?
viking
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.
tzar
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'
viking
Masakra, skup się.
  1. $sql = 'INSERT INTO m (tytul) VALUES ( "%s" )';


https://wwwgo.pl/advice/show/3/korzystam_z_...ed._dlaczego%3F
tzar
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...
nospor
facepalmxd.gif
Dostales dokladny kod jakiego masz uzyc i to nie potrafisz skopiowac :/
tzar
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...
nospor
Wynik sprintf() masz ponownie zapisac do zmiennej $sql i to przed wykonaniem zapytania.
tzar
Teraz gra, dzięki smile.gif
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.