Qual é o conjunto de caracteres padrão para o pdo mysql
Eu estava lendo sobre a injeção MySQL de segunda ordem nesta páginaAs instruções preparadas para DOP são suficientes para impedir a injeção de SQL?.
e trouxe muitas perguntas sobre ocharset
e não tenho certeza se meu código é seguro para a injeção do MySQL
No meu código, nunca uso charset ao fazer uma consulta,
Eu simplesmente faço
$pdo = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASSWORD, [PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_PERSISTENT => false]);
$stmt = $pdo->prepare("SELECT * FROM keywords WHERE keyword_name = ? || keyword_name = ?");
$stmt->execute(["hello","world"]);
rows = $stmt->fetchAll();
// show the data on webpage
$pdo = null;
Eu descobri que existem duas maneiras diferentes deset
acharset
em pdo
$pdo = new PDO("mysql:host=" . DB_HOST . ";charset=utf8;......);
e
$pdo->exec("set names utf8");
De acordo com as respostas @ircmaxell neste linkAs instruções preparadas para DOP são suficientes para impedir a injeção de SQL?. o primeiro método deve ser usado para proteger contra injeção SQL de segunda ordem ...
Mas eu tinhanever set
acharset
nos meus códigos (como mostrado no primeiro código), então eu tenho algumas perguntas
ut8_general_ci
(descobriu que nas operações phpmyadmin->)?éutf8
charset em cofre para injeção de segunda ordem, isto é$pdo = new PDO("mysql:host=" . DB_HOST . ";charset=utf8;......);
é feito trabalho contra todos os tipos de injeções mysql?