PHP ¿Cuál es el juego de caracteres predeterminado para pdo mysql
Estaba leyendo sobre la inyección de MySQL de segundo orden en esta páginaLas declaraciones preparadas por PDO son suficientes para evitar la inyección de SQL?.
y trajo muchas preguntas sobre elcharset
, y no estoy seguro de si mi código es seguro para la inyección de MySQL
En mi código, nunca uso charset mientras hago una consulta,
Simplemente hago
$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;
Encontré que hay dos formas diferentes deset
elcharset
en pdo
$pdo = new PDO("mysql:host=" . DB_HOST . ";charset=utf8;......);
$pdo->exec("set names utf8");
Según las respuestas de @ircmaxell en este enlaceLas declaraciones preparadas por PDO son suficientes para evitar la inyección de SQL?. el primer método debe usarse para proteger contra la inyección SQL de segundo orden ...
Pero tuvenever set
elcharset
en mis códigos (como se muestra en el primer código), así que tengo algunas preguntas
ut8_general_ci
(¿encontrado en phpmyadmin-> operaciones)?esutf8
juego de caracteres en caja fuerte para inyección de segundo orden, es decir,$pdo = new PDO("mysql:host=" . DB_HOST . ";charset=utf8;......);
¿se ha realizado un trabajo contra todo tipo de inyecciones mysql?