SQL Injection polega na wstrzykiwaniu w zpaytanie SQL niechcianego dodatkowego zapytania, coś w stylu gdy $id obierze postać:
Jak masz w tej bazie użytkowników to może to skutkować wyciągnięciem haseł i tym podobnych wrażliwych danych.
jezeli juz sie upierasz przy mysqli_query to podałem Ci połowiczne rozwiązanie w postaci filtrowania tego co przyjmujesz za ID
bo to pewnie metoda $_POST, albo gorzej $_GET.
Kopiuj
$id = htmlspecialchars($id)
Tylko tak jak napisałem to nie załatwi w 100% problemu bo to też można obejść. Już pokazuje jak wygląda MySQL PDO - przyjemniejsze:
Weźmy sobie na przykład to zapytanie:
Kopiuj
SELECT id FROM forum_a WHERE topic='$id' ORDER BY date DESC;
W PDO wyglądałoby to tak:
Kopiuj
$pdo = new PDO(
'mysql:host=localhost;dbname=[TUTAJ DATABASE NAME]',
'username',
'password');
$stmt = $pdo->prepare('SELECT id FROM forum_a WHERE topic= :topic ORDER BY date DESC;');
$stmt->bindParam(':topic', $id);
$stmt->execute();
$fetch = $stmt->fetch();
$stmt->closeCursor();
$pdo = null;
var_dump($fetch);
Prawda że przyjemne? Zasada działania jest prosta, przygotowujesz sobie baze pod zapytanie, potem uzywasz bindParam(':param', $zmienna), ewentualnie bindValue(':param', 'value') a na koniec execute -> fetch -> closeCursor :) proste, przejrzyste i skuteczne :)
P.S. pisane z pamięci więc może wyskoczyć jakiś błąd