Wyłapanie błędu z funkcji real escape string

Wyłapanie błędu z funkcji real escape string
GU
  • Rejestracja:około 7 lat
  • Ostatnio:około 4 lata
  • Postów:94
0

Cześć,
tworzę aplikację bazodanową przechowującą produkty w bazie danych. Używam funkcji mysqli_real_escape_string, by użytkownik nie mógł wrzucić w to miejsce kawałka kodu. Funkcja działa poprawnie, jednak przy wpisaniu w inputa inną wartość, pojawia mi się kod błędu i linijka. Ja bym chciał, by był tam warunek, który na przykład wróci mi do strony głównej. Próbowałem wstawić na IF ale wychodzi mi błąd. Czy w ogóle IF w takim miejscu zadziała? Czy jest inny sposób, bym mógł wyłapać error i odpowiednie zareagować na niego.

Mój kod:

Kopiuj
$data = array($_POST['marka'], $_POST['model']);
 
    $columns = array('marka', 'model');
    $text = "";

    for($z = 0; $z < 2; $z++){
        if(!empty($data[$z])){
            $text = $text . $columns[$z] . "='" . mysql_real_escape_string($data[$z]) . "', ";
        }
NewUser2k13
  • Rejestracja:ponad 11 lat
  • Ostatnio:13 dni
  • Postów:210
0

Funkcja działa poprawnie, jednak przy wpisaniu w inputa inną wartość, pojawia mi się kod błędu i linijka.
Co to za błąd? Możesz wkleić?

Ja strzelam, że problem masz w zapytaniu - zmienna $text
Nie wiem co z nią później robisz, ale zakładam, że nie pozbywasz się ostatniego przecinka (dołączanego w każdym obiegu pętli).

GU
  • Rejestracja:około 7 lat
  • Ostatnio:około 4 lata
  • Postów:94
0

Fatal error: Uncaught Error: Call to undefined function mysql_real_escape_string() in C:\xampp\htdocs\materialdb\modals\editmodal-product.php:117 Stack trace: #0 {main} thrown in C:\xampp\htdocs\materialdb\modals\editmodal-product.php on line 117

NewUser2k13
  • Rejestracja:ponad 11 lat
  • Ostatnio:13 dni
  • Postów:210
2

Jaka wersja PHP?
Od wersji PHP7.0 ta funkcja została usunięta.

https://www.php.net/manual/en/mysqli.real-escape-string.php

GU
  • Rejestracja:około 7 lat
  • Ostatnio:około 4 lata
  • Postów:94
0

To jakiej funkcji mam użyć, htmlspecialchar?

NewUser2k13
A jaka to wersja PHP? Jak powyżej 7.0 to użyj tej z linku powyższego (mysqli - z i na końcu - zamist mysql).
GU
Powyżej. Teraz zauważyłem, że cały czas używałem mysql zamiast mysqli. Mój błąd. Dzięki bardzo
AK
htmlspecialchar jak sama nazwa wskazuje służy do HTMLa a nie SQLa
GU
  • Rejestracja:około 7 lat
  • Ostatnio:około 4 lata
  • Postów:94
0

Problem tylko z tą funkcją jest taki, że przy podaniu znaków specjalnych, zmienia mi dane w bazie na puste pola.

katakrowa
  • Rejestracja:ponad 10 lat
  • Ostatnio:około 2 lata
  • Lokalizacja:Chorzów
  • Postów:1670
0

@guuren: Funkcja mysql_real_escape_string ma inną kolejność parametrów niż mysqli_real_escape_string

https://www.php.net/manual/en/function.mysql-real-escape-string.php
https://www.php.net/manual/en/mysqli.real-escape-string.php


Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
GU
To czy w moim przypadku lepiej będzie zastosować regex?
no_solution_found
@guuren: nie, nigdy nie używaj regexpa do tego typu zastosowań. Nigdy :)
no_solution_found
  • Rejestracja:prawie 18 lat
  • Ostatnio:16 dni
0

Polecam używanie PDO. Ma ładną składnie i fajnie ogarnia bezpieczne bindowanie danych. Możesz o nim poczytać tutaj: https://phpdelusions.net/pdo

To w jaki sposób robisz zapytania działa, ale jest bardzo błędnogenne. Ja polecam np takie api

Kopiuj
$sql = "UPDATE users SET name = ? WHERE id = ?";
$pdo->prepare($sql)->execute([$name, $id]);

I nie bawisz się w jakieś escapowanie itp, robi to za Ciebie PDO.


Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.