Košík je prázdný

Vývoj aplikací v PHP často zahrnuje práci s databázemi, přičemž jedním z běžných úkolů je zabezpečení aplikace proti SQL injekcím. Funkce mysql_real_escape_string() byla dlouhou dobu standardním nástrojem pro tento účel v PHP. Tato funkce slouží k ošetření speciálních znaků v řetězcích, které jsou vloženy do SQL dotazů, čímž pomáhá předcházet možným útokům. Vznik chyby "Fatal error: Call to undefined function mysql_real_escape_string()" však signalizuje, že vaše aplikace se pokouší volat funkci, která již v aktuální verzi PHP není definována.

Příčiny vzniku chyby

Chyba "Fatal error: Call to undefined function mysql_real_escape_string()" se obvykle objevuje z jednoho z těchto důvodů:

  1. Zastaralý kód: Funkce mysql_real_escape_string() patří do rozhraní MySQL, které bylo označeno jako zastaralé (deprecated) ve verzi PHP 5.5.0 a nakonec bylo odstraněno ve verzi PHP 7.0.0. Pokud váš kód stále používá tuto funkci, bude nekompatibilní s novějšími verzemi PHP.

  2. Nepovolené rozšíření MySQL: Na serveru nemusí být povoleno staré rozšíření MySQL, které funkci mysql_real_escape_string() poskytovalo, což způsobuje, že volání této funkce skončí chybou.

Jak chybu opravit

Aktualizace kódu: Nejlepším řešením je aktualizovat váš kód, aby byl kompatibilní s novějším rozšířením MySQLi nebo s PDO (PHP Data Objects). Toto jsou moderní a bezpečné alternativy k rozšíření MySQL, které byly odstraněné.

Přechod na MySQLi:

  • Funkce mysql_real_escape_string() má v MySQLi obdobu mysqli_real_escape_string().
  • Tato funkce vyžaduje, aby prvním parametrem byl identifikátor spojení s databází:
    $conn = mysqli_connect("hostname", "username", "password", "database");
    $safe_string = mysqli_real_escape_string($conn, $unsafe_string);
    ​

Použití PDO:

  • PDO nabízí ještě lepší způsob práce s databázemi prostřednictvím připravených dotazů (prepared statements), které automaticky ošetří všechny vstupní řetězce a zároveň zjednoduší práci s různými databázovými systémy.
  • Příklad připraveného dotazu s PDO:
    $pdo = new PDO("mysql:host=hostname;dbname=database", "username", "password");
    $stmt = $pdo->prepare("INSERT INTO table (column) VALUES (:value)");
    $stmt->bindParam(':value', $unsafe_string, PDO::PARAM_STR);
    $stmt->execute();
    ​

 

Oprava chyby "Fatal error: Call to undefined function mysql_real_escape_string()" vyžaduje aktualizaci zastaralého kódu. Přechodem na rozšíření MySQLi nebo použitím PDO nejenže vyřešíte tento problém, ale zároveň zvýšíte bezpečnost a flexibilitu vaší aplikace. Doporučuje se pravidelně revize zdrojového kódu a jeho aktualizace, aby byl v souladu s nejnovějšími standardy a doporučeními, což je klíčem k bezpečnému a efektivnímu vývoji aplikací.