Как подключиться к базе данных с точкой с запятой в имени? - PullRequest
0 голосов
/ 15 февраля 2020

У меня есть база данных с точкой с запятой в имени, например, a;a. Я не могу переименовать базу данных. В SQL я бы использовал обратные метки для экранирования имени, но как я могу сделать это в DSN PDO?

$db = 'a;a';
$dsn = "mysql:host=localhost;dbname=$db;charset=utf8mb4";
$options = [
    \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
    \PDO::ATTR_EMULATE_PREPARES => false,
];
try {
    $pdo = new PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
    throw new \PDOException($e->getMessage(), (int) $e->getCode());
}

Поскольку ; используется в качестве разделителя в DSN, PDO считает мою базу данных называется a, и я получаю эту ошибку:

Неустранимая ошибка: Uncaught PDOException: SQLSTATE [HY000] [1049] Неизвестная база данных 'a'

1 Ответ

2 голосов
/ 15 февраля 2020

Я решил это с помощью двойной точки с запятой.

$db = 'a;;a'; // <-- means the database is called `a;a`
$dsn = "mysql:host=localhost;dbname=$db;charset=utf8mb4";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...