не PDOException: SQLSTATE [HY000] [2002] Нет такого файла или каталога

Обновить

December 2018

Просмотры

29.7k раз

2

Я поставил PushChatServer реж в папку HTDOCS и создать базу данных puschat попытаться запустить @ « HTTP: //localhost/PushChatServer/api/test/database.php »

Тогда я получил следующее исключение.

Я хочу сделать то же самое , чтобы объяснить эту связь http://www.raywenderlich.com/32963/apple-push-notification-services-in-ios-6-tutorial-part-2

Я сделал все это, но я получил это исключение

Не удалось подключиться к базе данных. Причина: исключение 'PDOException' с сообщением 'SQLSTATE [HY000] [2002] Нет такого файла или каталога' в /Applications/MAMP/htdocs/PushChatServer/api/test/database.php:17 трассировки стека: # 0 / Applications / MAMP /htdocs/PushChatServer/api/test/database.php(17): PDO -> __ построить ( 'MySQL: хост = сумасшедшая ...', 'корень', 'корень', Array) # 1 {} основной

9 ответы

2

Я не уверен, если это будет работать для вас; но я использую CakePHP, и я получаю эту ошибку всякий раз, когда я забыл поставить номер порта в конце «хозяина».

Надеюсь это поможет!

До

'test' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'username' => 'root',
        'password' => 'root',
        'database' => 'mylogin',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'cacheMetadata' => true,
        'quoteIdentifiers' => false,
        'log' => false,
        //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
        'url' => env('DATABASE_TEST_URL', null),
    ]

После

'test' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => 'localhost:8080',
        'username' => 'root',
        'password' => 'root',
        'database' => 'mylogin',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'cacheMetadata' => true,
        'quoteIdentifiers' => false,
        'log' => false,
        //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
        'url' => env('DATABASE_TEST_URL', null),
    ]
1

PDO лечит локальный очень особенно:

От http://php.net/manual/en/ref.pdo-mysql.connection.php :

Примечание: Unix только: Если имя хоста установлено на «локальный», то соединение с сервером производится через сокет домена. Если PDO_MYSQL скомпилирован против libmysqlclient того местоположение файла сокета находится в libmysqlclient, составленные в месте. Если PDO_MYSQL скомпилирован против mysqlnd сокет по умолчанию может быть установлен через настройку pdo_mysql.default_socket.

Вот почему PDO и mysql_connect даст различное поведение для локального хоста.

Итак, если вы хотите использовать соединение TCP с PDO, никогда не используйте Localhost но 127.0.0.1.

2

У меня была такая же ошибка для Mysql PDO, этот код работает для меня!

<?php
$dsn = 'mysql:host=127.0.0.1;dbname=testdb';
$username = 'username';
$password = 'password';
$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
); 

$dbh = new PDO($dsn, $username, $password, $options);
?>

получил этот код от: http://php.net/manual/en/ref.pdo-mysql.connection.php

6

Laravel 4: В вашей app/config/database.phpпопытке изменяющегося хозяина от localhostдо127.0.0.1

Laravel 5: В .envфайле, изменение DB_HOSTот localhostдо127.0.0.1

Источник: PDOException SQLSTATE [HY000] [2002] Нет такого файла или каталога

3

Я имел такую ​​же ошибку, используя PHP 5.6.30 (MacOS Sierra) с простым кодом PDO, как:

$pdo = new PDO('mysql:host=localhost;dbname=db_php', 'root', '');

И я получил то же самое сообщение об ошибке. Чтобы исправить, я изменил «локальный» для IP (петлевой) «127.0.0.1» в моем коде:

$pdo = new PDO('mysql:host=127.0.0.1;dbname=db_php', 'root', '');

Для проверки соединения:

$ php -r "new PDO('mysql:host=127.0.0.1;dbname=db_php', 'root', '');"

Эта работа для меня!

11

Быстрый тест (запуск в оболочке):

php -r "new PDO('mysql:hostname=localhost;dbname=test', 'username', 'password');"

SQLSTATE [HY000] [2002] Нет такого файла или каталога не означает , что PHP не может найти файл mysql.default_socket. Исправить это путем модификации файла php.ini. На Mac это mysql.default_socket = /tmp/mysql.sock (см PHP - MySQL соединение не работает: 2002 Нет такого файла или каталога )

SQLSTATE [HY000] [1044] Доступ запрещен для пользователя 'имя пользователя' @ 'локальный' ПОЗДРАВЛЕНИЕ! У вас есть правильный mysql.default_socket установки в настоящее время. Исправьте DbName / имя пользователя / пароль.

Также см Ошибки на создание соединения с PDO в PHP

2

Я не уверен, если это будет работать для вас; но я использую CakePHP, и я получаю эту ошибку всякий раз, когда я забыл поставить номер порта в конце «хозяина».

Надеюсь это поможет!

До

'test' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => 'localhost',
        'username' => 'root',
        'password' => 'root',
        'database' => 'mylogin',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'cacheMetadata' => true,
        'quoteIdentifiers' => false,
        'log' => false,
        //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
        'url' => env('DATABASE_TEST_URL', null),
    ]

После

'test' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => 'localhost:8080',
        'username' => 'root',
        'password' => 'root',
        'database' => 'mylogin',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'cacheMetadata' => true,
        'quoteIdentifiers' => false,
        'log' => false,
        //'init' => ['SET GLOBAL innodb_stats_on_metadata = 0'],
        'url' => env('DATABASE_TEST_URL', null),
    ]
-1

Просто столкнулся с этим же вопросом, и проблема пароль. В учебнике автор перечисляет пароль как:

"d]682\#%yl1nb3"

Таким образом, согласно предложению дается @ Marki555, я посмотрел в конфигурационном файле - api_config.php. и пароль в списке есть:

"d]682\#%yI1nb3"

Верхний регистр «Я», что вызвало проблему, потому что пароль, который вы установите для пользователя на БД имеет пароль с строчным л, но это на самом деле ищет прописную I. После того как я изменил пароль пользователя pushchat, чтобы иметь заглавную I , это сработало!

1

Перезапустите базу данных и локальный веб-сервер:

  • перезапуск службы туздЫ Судо
  • перезапуск службы туздЫ Судо

Он должен работать!

Связанные вопросы