Есть ли способ получить текущий набор символов с PDO? Раньше у меня был небольшой тест с Mysqli, чтобы проверить, был ли установлен принудительный набор символов, извлекая его так:
$mysqli->get_charset();
Это не работает на $ conn = new PDO ();
Любая помощь приветствуется. Я довольно новичок в PDO и пытаюсь перепрыгнуть из mysqli.
Ps я знаю, как установить набор символов, просто хочу проверить, как его получить.
Благодаря HD, отвечая на вопрос, я сделал его метод статическим, возможно, полезным для кого-то (я использовал некоторые до 5.4 нотации):
public static function getCharset(PDO $objPdo) { $objCharset = $objPdo->query("SELECT COLLATION('foo')"); $charset = $objCharset->fetch(PDO::FETCH_NUM); return $charset[0]; }
Если мы запустим следующий запрос MySQL;
mysql> SELECT COLLATION('foo'); +-----------------------+ | COLLATION('foo') | +-----------------------+ | utf8_general_ci | +-----------------------+ 1 row in set
Итак, мы можем использовать следующее, чтобы получить кодировку
$objCharset = $objPdo->query("SELECT COLLATION('foo')"); echo $objCharset->fetch(PDO::FETCH_NUM)[0]; //Output: utf8_general_ci
Затем вы можете сделать еще один шаг и использовать следующее (с инъекцией объекта).
<?php class foo { public function get_charset($objPdo) { $objCharset = $objPdo->query("SELECT COLLATION('foo')"); return $objCharset->fetch(PDO::FETCH_NUM)[0]; } } $objFoo = new foo(); $objPDO = new PDO(...); echo $objFoo->get_charset($objPDO);
Если вы хотите, чтобы фактическая кодировка (не сортировка), вы можете сделать это:
$charset = $pdo->query("SELECT CHARSET('')")->fetchColumn(); if($charset === 'utf8mb4') { $charset = 'utf8'; }
Я поставил там utf8mb4
потому что он несовместим с функциями mb_
PHP.