@dev21

Почему не подключается PDO локально?

Использую Open Server. Пишу:

define('DB_HOSTNAME', '127.0.0.1:3310');
define('DB_USERNAME', 'mysql');
define('DB_PASSWORD', 'mysql');
define('DB_DATABASE', 'mydb');

function joinPairs(array $map, $kvSeparator = '=', $itemsSeparator = ';') {
    $result = [];

    foreach ($map as $key => $value) {
        $result[] = "${key}${kvSeparator}${value}";
    }

    return implode($itemsSeparator, $result);
}

$hostParts = explode(':', DB_HOSTNAME);

$dsn = 'mysql:' . joinPairs([
    'host' => $hostParts[0],
    'port' => $hostParts[1],
    'dbname' => DB_DATABASE,
    'charset' => 'utf8',
]);

try {
    $db = new PDO($dsn, DB_USERNAME, DB_PASSWORD, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::MYSQL_ATTR_INIT_COMMAND => "set names 'utf8'",
    ]);
} catch (PDOException $e) {
    die($e->getMessage());
}


Получаю: SQLSTATE[HY000] [2002] ����������� �� �����������, �.�. �������� ��������� ������ ������ �� �����������.

Причем именно так, со сбитой кодировкой. Даже не знаю что там написано. На сервере тот же код (только с другими данными входа) работает.
  • Вопрос задан
  • 89 просмотров
Пригласить эксперта
Ответы на вопрос 2
vesper-bot
@vesper-bot
Любитель файрволлов
Не ходи по localhost, ходи по внешнему адресу. Ошибка вида "Connection refused", и скорее всего, mysql-сервер запрещает ходить локально по дополнительным параметрам (скажем, идет проверка в /etc/passwd, а пользователь локальный для сервера).
Ответ написан
@Jacome
проверь правильно ли прописан порт. по умолчанию 3306
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы