Možnost character_set_client
je to, co MySQL používá pro znakovou sadu dotazů a dat, které klient odesílá.
Výchozí hodnota je utf8 v MySQL 5.5, 5.6 a 5.7 a utf8mb4 v 8.0.
Lze jej také změnit globálně ve vašem souboru voleb my.cnf nebo na relaci pomocí NASTAVIT JMÉNA prohlášení.
Je dobré tuto možnost explicitně nastavit při připojování, takže nemusíte převzít její výchozí hodnotu.
K vašemu komentáři:
Obávám se, že si pletete dva různé případy SQL injection. Při použití těchto specifických pěti znakových sad existuje riziko, ale nesouvisí s injekcí SQL druhého řádu.
Riziko znakové sady je způsobeno některými vícebajtovými znakovými sadami. Je běžné vložit zpětné lomítko, aby se unikl znak doslovné citace. Ale v některých znakových sadách se bajt zpětného lomítka sloučí do předchozího bajtu a vytvoří vícebajtový znak. To ponechává citaci bez znaků.
Injekce SQL druhého řádu je úplně jiná. Může nastat u jakékoli znakové sady. To je, když útočník přidá data do vaší databáze legitimními prostředky, jako je vyplnění formuláře. Vkládání dat probíhá bezchybně. Ale hodnoty, které vkládají, obsahují syntaxi navrženou tak, aby využívala pozdější SQL dotaz.
Spoléhá na to, že vývojáři věří, že data, která již byla bezpečně uložena do jejich databáze, jsou nějakým způsobem „bezpečná“ pro použití bez řádné parametrizace.
Příkladem injekce SQL druhého řádu, která je pouze náhodná namísto škodlivého, může být to, že osoba má příjmení „O'Reilly“ a jméno je přečteno kódem a použito v následném dotazu.
$name = $db->query("SELECT last_name FROM people WHERE id = 123")->fetchColumn();
$sql = "SELECT * FROM accounts WHERE account_owner_last_name = '$name'";
Pokud název obsahuje doslovný apostrof, zkazilo by to druhý dotaz v tomto příkladu.