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ů:
-
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.
-
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í.