• 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
671 wizyt
pytanie zadane 27 maja 2022 w PHP przez kingkushlee Gaduła (3,960 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 2022 przez VBService Ekspert (256,580 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 2022 przez Wiciorny Ekspert (283,300 p.)
wybrane 27 maja 2022 przez kingkushlee
 
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 2022 przez kingkushlee Gaduła (3,960 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 2022 przez Wiciorny Ekspert (283,300 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 2022 przez kingkushlee Gaduła (3,960 p.)
W porządku, dziękuję za poradę. Zacznę używać prepared statementów.
1
komentarz 27 maja 2022 przez Wiciorny Ekspert (283,300 p.)
Pomijam już kwestie unikania błędu, ale jest to zdecydowanie bezpieczniejsze i praktyczniejsze rozwiązanie :)

Podobne pytania

0 głosów
1 odpowiedź 624 wizyt
pytanie zadane 23 października 2022 w PHP przez LisekPolska Początkujący (340 p.)
0 głosów
1 odpowiedź 3,091 wizyt
pytanie zadane 27 września 2015 w SQL, bazy danych przez wanderer Gaduła (3,710 p.)
0 głosów
1 odpowiedź 446 wizyt
pytanie zadane 27 listopada 2021 w SQL, bazy danych przez Tomeq Nowicjusz (200 p.)

93,735 zapytań

142,672 odpowiedzi

323,294 komentarzy

63,297 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...