• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd w składni zapytania SQL

0 głosów
57 wizyt
pytanie zadane 27 maja w PHP przez chumanista Gaduła (3,780 p.)

Witam, mam taki kod: (zmienna $nazwa jest zdefiniowana we wcześniejszej części kodu jako htmlentities($_POST['nazwa'], ENT_QUOTES, "utf-8");

$dir = 'grafika' . DIRECTORY_SEPARATOR . 'meble' . DIRECTORY_SEPARATOR . $next_id . DIRECTORY_SEPARATOR;

        for ($j = 0; $j < $file_count; $j++) {
            $sl_id = $j + 1;
            $sizex = 1280;
            $sizey = 720;
            if (!$mysqli->query(sprintf("INSERT INTO tabela_slider VALUES('$next_id', NULL, '$sl_id', '$dir', '$sizex', '$sizey', '%s')",
            mysqli_real_escape_string($mysqli, $nazwa)))) {
                echo $mysqli->error;
                $mysqli->close();
                die('Blad polaczenia');
            }
        }

Większość walidatorów SQL twierdzi, że moje zapytanie jest w porządku, jednak mysqli::error wywala to:

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 '1280', '720', 'Fotel')' at line 1

Z góry dziękuję za pomoc

komentarz 28 maja przez VBService Mędrzec (179,230 p.)

BTW, skoro zmienne

for ($j = 0; $j < $file_count; $j++) {
    // ...
    $sizex = 1280;
    $sizey = 720;
    // ...
}

mają stałą wartość, to Moim zdaniem, lepiej jest zapisać to

$sizex = 1280;
$sizey = 720;
for ($j = 0; $j < $file_count; $j++) {
    $sl_id = $j + 1;
    if (...) {
       // ...
    }
}

 

1 odpowiedź

+2 głosów
odpowiedź 27 maja przez Wiciorny Ekspert (228,730 p.)
wybrane 27 maja przez chumanista
 
Najlepsza
No nie jest poprawny, problemem jest to, że twój SQL jest w STRINGU  podwójnego cudzysłowie "cos" a w środku korzystasz z pojedynczego przy np zmiennej,
komentarz 27 maja przez chumanista Gaduła (3,780 p.)
Więc jak poprawnie koduje się stringi w zapytaniach SQL korzystając z PHP? Mam jeszcze jedno zapytanie skonstruowane w podobny sposób i działa bez zarzutu.
1
komentarz 27 maja przez Wiciorny Ekspert (228,730 p.)

po pierwsze użyj parametrów nienazwanych może, jak się koduje 

$mysqli->prepare('INSERT INTO table(subject,message) VALUES (?,?)'))

albo, https://www.php.net/manual/en/mysqli.real-escape-string.php. Koduje się naturalnie, ale twoje pytanie błędne jest w samo w sobie, zresztą inaczej powinieneś podejść do przekazywania parametrów 

komentarz 27 maja przez chumanista Gaduła (3,780 p.)
W porządku, dziękuję za poradę. Zacznę używać prepared statementów.
1
komentarz 27 maja przez Wiciorny Ekspert (228,730 p.)
Pomijam już kwestie unikania błędu, ale jest to zdecydowanie bezpieczniejsze i praktyczniejsze rozwiązanie :)

Podobne pytania

0 głosów
1 odpowiedź 1,743 wizyt
pytanie zadane 27 września 2015 w SQL, bazy danych przez wanderer Gaduła (3,690 p.)
0 głosów
1 odpowiedź 78 wizyt
pytanie zadane 27 listopada 2021 w SQL, bazy danych przez Tomeq Nowicjusz (200 p.)
0 głosów
0 odpowiedzi 101 wizyt
pytanie zadane 23 lutego 2019 w SQL, bazy danych przez zerakot Obywatel (1,870 p.)

88,701 zapytań

137,308 odpowiedzi

306,748 komentarzy

58,894 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...