No ne, žádný neexistuje!
Technicky existuje PDO::quote()
ale používá se jen zřídka a není ekvivalentem mysql_real_escape_string()
Správně! Pokud již používáte PDO správným způsobem, jak je zdokumentováno pomocí připravených prohlášení , pak vás ochrání před injekcí MySQL.
# Example:
Níže je uveden příklad trezoru databázový dotaz pomocí připravených příkazů (pdo)
try {
// first connect to database with the PDO object.
$db = new \PDO("mysql:host=localhost;dbname=xxx;charset=utf8", "xxx", "xxx", [
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);
} catch(\PDOException $e){
// if connection fails, show PDO error.
echo "Error connecting to mysql: " . $e->getMessage();
}
A nyní za předpokladu, že je navázáno připojení, můžete provést dotaz takto.
if($_POST && isset($_POST['color'])){
// preparing a statement
$stmt = $db->prepare("SELECT id, name, color FROM Cars WHERE color = ?");
// execute/run the statement.
$stmt->execute(array($_POST['color']));
// fetch the result.
$cars = $stmt->fetchAll(\PDO::FETCH_ASSOC);
var_dump($cars);
}
Nyní, jak pravděpodobně víte, nepoužil jsem nic k úniku/dezinfekci hodnoty $_POST["color"]
. A tento kód je zabezpečen před myql-injection díky PDO a síle připravených výpisů.
Stojí za zmínku, že byste měli předat charset=utf8
jako atribut ve vašem DSN
jak je vidět výše, z bezpečnostních důvodů a vždy povolte PDO zobrazovat chyby ve formě výjimek.
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
takže chyby z vašich databázových dotazů neodhalí citlivá data, jako je vaše adresářová struktura, uživatelské jméno databáze atd.
V neposlední řadě jsou chvíle, kdy byste PDO neměli důvěřovat na 100% a budete muset přijmout nějaká další opatření, abyste zabránili vkládání sql, jedním z takových případů je, pokud používáte zastaralé verze mysql [ mysql =< 5.3.6 ]
jak je popsáno v tato odpověď
Ale použití připravených příkazů, jak je uvedeno výše, bude vždy bezpečnější než použití kterékoli z funkcí, které začínají mysql_
Dobré čtení