SQLSTATE [HY000] [2002] Нет такого файла или каталога - Laravel [duplicate]

Если ваше представление основано на модели, и вы создали элементы управления внутри тегов <form>, вы можете сериализовать модель на FormData, используя

var formdata = new FormData($('form').get(0));

. Сюда также будут включены любые файлы сгенерированный с помощью <input type="file" name="myImage" .../>

, и отправьте его обратно с помощью

$.ajax({
  url: '@Url.Action("YourActionName", "YourControllerName")',
  type: 'POST',
  data: formdata,
  processData: false,
  contentType: false,         
});

и в вашем контроллере

[HttpPost]
public ActionResult YourActionName(YourModelType model)
{
}

или (если ваша модель не включает свойство для HttpPostedFileBase)

[HttpPost]
public ActionResult YourActionName(YourModelType model, HttpPostedFileBase myImage)
{
}

Если вы хотите добавить дополнительную информацию, которая не находится в форме, вы можете добавить ее с помощью

formdata.append('someProperty', 'SomeValue');
216
задан stuyam 10 February 2016 в 17:41
поделиться

28 ответов

Сообщение об ошибке указывает, что соединение MySQL через сокет проверено (что не поддерживается).

В контексте Laravel (ремесленник) вы, вероятно, захотите использовать другую / правильную среду. Например: php artisan migrate --env=production (или какая-либо окружающая среда). См. здесь .

81
ответ дан ukautz 22 August 2018 в 06:27
поделиться
  • 1
    Это работает, так что спасибо, но у меня создалось впечатление, что Laravel автоматически откажется от производства? – Daniel Hollands 23 December 2013 в 10:44
  • 2
    Спасибо, это была моя точная проблема. Не думал о конфигах ... – Stormsson 14 April 2014 в 16:27
  • 3
    ▼ ответ ниже должен быть принят – Limon Monte 19 April 2015 в 17:11
  • 4
    Ниже ответа @Yamartino правильно и исправлена ​​моя проблема. Это должен быть принятый ответ – Altaf Hussain 9 December 2015 в 09:54
  • 5
    Это было решением моей проблемы, один из разработчиков в нашей компании не использует Homestead и подключается к mysql через socket. Я удалил конфигурацию сокета в моем файле app / database.php. Задача решена – borislemke 29 January 2016 в 07:06

Это правильный ответ для меня. Я отключил опцию pdo_mysql.default_socket в моем php.ini и установил хост базы данных в 127.0.0.1.

1
ответ дан Alberto 22 August 2018 в 06:27
поделиться
  • 1
    На этот вопрос нет единого правильного ответа, так как существует множество ошибок, которые могут быть сделаны. Это один из них, так как не удается скопировать файл .env на удаленный сервер. Поэтому стоит проверить файл .env на сервере, где вы пытаетесь запустить запрос, чтобы убедиться, что он существует, и содержит необходимую информацию для установления соединения. – petercoles 9 February 2016 в 11:26

У меня такая же проблема, и я запускаю Mac OS X 10.10 Yosemite. Я включил Apache Server и PHP, которые уже поставляются с ОС. Затем я только что настроил библиотеку mCrypt для начала работы. После этого, когда я работал с моделями и DB, я получил ошибку:

[PDOException]
SQLSTATE[HY000] [2002] No such file or directory

Причина, по которой я нашел, - это просто потому, что PHP и MySQL не могут подключиться сами. Чтобы устранить эту проблему, я следую следующим шагам:

  1. Откройте терминал и подключитесь к mysql с помощью: mysql -u root -p
  2. Он попросит вас связанный пароль , Затем, как только вы получите mysql promt, введите следующую команду: mysql> show variables like '%sock%'
  3. Вы получите что-то вроде этого: +-----------------------------------------+-----------------+ | Variable_name | Value | +-----------------------------------------+-----------------+ | performance_schema_max_socket_classes | 10 | | performance_schema_max_socket_instances | 322 | | socket | /tmp/mysql.sock | +-----------------------------------------+-----------------+
  4. Сохраните значение последней строки: /tmp/mysql.sock
  5. В папке проекта laravel найдите файл database.php , где вы настраиваете параметры соединения с БД. В секции mysql добавьте следующую строку в конец: 'unix_socket' => '/tmp/mysql.sock'
  6. У вас должно быть что-то вроде этого:

'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'SchoolBoard', 'username' => 'root', 'password' => 'venturaa', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'unix_socket' => '/tmp/mysql.sock', ),

Теперь просто сохраните изменения и перезагрузите страницу, и она должна работать! Надеюсь, это может быть полезно!

64
ответ дан Alex Ventura 22 August 2018 в 06:27
поделиться
  • 1
    Это решило проблему для OSX 10.10 для меня +1. – Subrat Pattnaik 5 April 2015 в 19:59
  • 2
    Наиболее "прямой выпуск" решение. Thanx, это фиксировало меня на запуске Laravel с помощью MAMP pro – animaacija 25 June 2015 в 07:38
  • 3
    Спасибо за это. Это сработало для меня. Использование OSX 10.10.5 MAMP Pro – marknt15 5 November 2015 в 05:45
  • 4
    Работал для меня также OSX 10.11 MAMP, ура – Kanishka Panamaldeniya 10 December 2015 в 13:02
  • 5
    Добро пожаловать @ KanishkaPanamaldeniya – Alex Ventura 10 December 2015 в 17:23

Попытка подключения к localhost:

SQLSTATE[HY000] [2002] No such file or directory

Попытка подключения к 127.0.0.1:

SQLSTATE[HY000] [2002] Connection refused

OK, просто комментируйте / удаляйте следующую настройку из my.cnf (на OS X 10.5: /opt/local/etc/mysqlxx/my.cnf), чтобы получить:

[mysqld]
# skip-networking

Конечно, остановите и запустите MySQL Server.

1
ответ дан Anna Logg 22 August 2018 в 06:27
поделиться

Я работаю на MAMP Pro и сталкивался с подобной проблемой при попытке переноса (создание таблиц db). Пробовал некоторые из этих упомянутых предложений, но не сделал этого для меня.

Итак, просто (через час googling), я добавил две вещи в /config/database.php.

'port' => '1234',
'unix_socket' => '/path/to/my/socket/mysqld.sock'

Теперь работает отлично!

7
ответ дан anoraq 22 August 2018 в 06:27
поделиться

В этом случае я просто использовал

vagrant up

вместо

homestead up

для моей настройки личинок кузницы с использованием усадьбы. Я предполагаю, что это означало, что сайт обслуживался, но сервер MySQL никогда не загружался. Когда я использовал последнюю команду для запуска моего бродячего бокса, ошибка исчезла.

0
ответ дан Ben Wilson 22 August 2018 в 06:27
поделиться

В моем случае я запускал php artisan migrate на моем терминале Mac, когда мне нужно было ssh в бродягу и запустить его оттуда. Надежда, которая помогает кому-то в головной боли.

0
ответ дан Brad 22 August 2018 в 06:27
поделиться

В моем случае у меня вообще не было проблем, просто забыл запустить службу mysql ...

sudo service mysqld start

12
ответ дан Carlos ABS 22 August 2018 в 06:27
поделиться

При использовании VirtualMachine убедитесь, что вы ssh на этом компьютере, и перейдите в свою папку App и вызовите команду миграции php artisan.

0
ответ дан cmac 22 August 2018 в 06:27
поделиться

Основываясь на ответе @dcarrith ...

Вместо редактирования файлов конфигурации я создал псевдоним в местоположении, которое ищет PHP, которое подключается к реальному mysql.sock. ( source )

Просто запустите эти две команды (не требуется перезагрузка):

mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock
505
ответ дан Community 22 August 2018 в 06:27
поделиться
  • 1
    Это сработало и для меня. – Chandan Gupta 25 May 2014 в 07:38
  • 2
    странно, что это тоже решение для меня, но я могу подключиться из командной строки с mysql -host = localhost - это работает, но не из PDO. – John 23 June 2014 в 18:24
  • 3
    Я хотел бы знать, ПОЧЕМУ localhost не работает, а 127.0.0.1 делает? – Justin 18 October 2014 в 03:35
  • 4
    Это работало для меня в системе MAMP, в которой запущен php-файл в командной строке (терминал). Он работал как веб-страница, но не как файл командной строки, пока я не изменил localhost на «127.0.0.1», – Samuel Fullman 8 January 2015 в 12:57
  • 5
    A Unix socket file is used if you do not specify a host name or if you specify the special host name localhost. dev.mysql.com/doc/refman/5.7/en/can-not-connect-to-server.html – x-yuri 17 August 2016 в 17:22

Я столкнулся с ошибкой [PDOException] SQLSTATE[HY000] [2002] No such file or directory по другой причине. Я только что закончил создание нового стека LAMP на Ubuntu 12.04 с Apache 2.4.7, PHP v5.5.10 и MySQL 5.6.16. Я переместил свои сайты и уволил их. Но я не смог загрузить свой сайт на основе Laravel 4.2.x из-за [PDOException] выше. Итак, я проверил php -i | grep pdo и заметил эту строку:

pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock

Но в моем файле /etc/my.cnf файл sock фактически находится в /var/run/mysqld/mysqld.sock.

So , Я открыл php.ini и установил значение для pdo_mysql.default_socket:

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock

Затем я перезапустил apache и проверил php -i | grep pdo:

pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock

Это исправлено это для меня.

41
ответ дан dcarrith 22 August 2018 в 06:27
поделиться
  • 1
    Я не знаю, кто вы, но вам следует приветствовать 21 пушку. – Chirag 8 March 2015 в 12:10
  • 2
    @dcarrith, вы настоящий MVP. Рад, что я не стал менять localhost = & gt; 127.0.0.1 – StrikeForceZero 6 October 2015 в 23:31
  • 3
    Это было исправление, которое сработало для меня, проблема в том, что я установил две версии mysql и удалил один, изменение 127.0.0.1 не сработало или добавило носок в конфиг, спасибо! @dcarrith – Luis 27 October 2015 в 03:32
  • 4
    Это помогло мне найти мою проблему - это было то, что я использовал OSX в комплекте php, а не двоичный файл MAMP php. Поэтому убедитесь, что вы используете правильную версию php, которая указывает на правильный php.ini и т. Д. Определенный & quot; doh! & Quot; момент. – dragonflyesque 5 April 2016 в 18:43

Если вы используете Laravel Homestead, вот настройки

(включая Vagrant-Virtual Machine)

.bash-profile

alias vm="ssh vagrant@127.0.0.1 -p 2222"

database. php

    'mysql' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', '127.0.0.1'),
        'database'  => env('DB_DATABASE', 'homestead'),
        'username'  => env('DB_USERNAME', 'homestead'),
        'password'  => env('DB_PASSWORD', 'secret'),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],

Терминал

vm

vagrant@homestead:~/Code/projectFolder  php artisan migrate:install
1
ответ дан ErcanE 22 August 2018 в 06:27
поделиться

Опция включения пользователя Mamp Разрешить доступ к сети MYSQL

16
ответ дан George John 22 August 2018 в 06:27
поделиться

Проверьте свой порт внимательно. В моем случае это было 8889, и я использую 8888. измените «DB_HOST» с «localhost» на «127.0.0.1» и наоборот

2
ответ дан ischool.pk 22 August 2018 в 06:27
поделиться

Это случилось со мной, потому что MySQL не работал. MySQL не запускался, потому что у меня был отсутствующий каталог /usr/local/etc/my.cnf.d/.

Это потребовалось моему конфигурационному файлу /usr/local/etc/my.cnf в качестве glob include (include /usr/local/etc/my.cnf.d/*.cnf).

Запуск mkdir /usr/local/etc/my.cnf.d, а затем запуск MySQL, исправил проблему.

0
ответ дан james2doyle 22 August 2018 в 06:27
поделиться

Если вы используете Laravel Homestead, убедитесь, что вы вызываете команды на сервере.

homestead ssh

Затем просто введите cd в нужный каталог и запустите команду.

19
ответ дан Koen B. 22 August 2018 в 06:27
поделиться
  • 1
    О, мой бог! Это мой ответ! Благодаря! – rigobcastro 17 September 2015 в 02:07
  • 2
    Это сработало, я запускал команду с моего компьютера вместо ssh в первую и запущенную команду VM там. – cmac 21 December 2016 в 17:00
  • 3
    Я всегда забываю этот шаг. Хех. 1. source ~/.zshrc 2. homestead up --provision 3. homestead ssh – Marcel 9 February 2017 в 03:58
  • 4
    – Marcos Curvello 18 October 2018 в 15:54

Шаг 1

Найдите путь к вашему unix_socket, для этого просто запустите netstat -ln | grep mysql

Вы должны получить что-то вроде этого

unix  2      [ ACC ]     STREAM     LISTENING     17397    /var/run/mysqld/mysqld.sock

Шаг 2

Возьмите это и добавьте его в свой параметр unix_socket

'mysql' => array(
            'driver'    => 'mysql',
            'host'      => '67.25.71.187',
            'database'  => 'dbname',
            'username'  => 'username',
            'password'  => '***',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'unix_socket'    => '/var/run/mysqld/mysqld.sock' <-----
            ),
        ),

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

10
ответ дан kyo 22 August 2018 в 06:27
поделиться

[Это устарело, информация о базе данных сохраняется в .env now]. Более простой способ решить проблему - редактировать

app/config/local/database.php

:)

Изменить базу данных конфигурации здесь, и он должен работать

0
ответ дан Mahmood 22 August 2018 в 06:27
поделиться

Начиная с Laravel 5 имя и пароль базы данных поступают в файл .env, который существует в каталоге проекта, например

DB_HOST=127.0.0.1
DB_DATABASE=db1
DB_USERNAME=user1
DB_PASSWORD=pass1

. Поскольку вы можете видеть, что эти переменные среды переопределяют строки «forge» здесь их изменение не имеет эффекта:

    'mysql' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'forge'),
        'username'  => env('DB_USERNAME', 'forge'),
        'password'  => env('DB_PASSWORD', ''),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
    ],

Дополнительная информация здесь https://mattstauffer.co/blog/laravel-5.0-environment-detection-and-environment-variables

2
ответ дан malhal 22 August 2018 в 06:27
поделиться

Все эти ответы кажутся тяжелой лифтингом ...

Я только что создал файл .env; отредактировал мой файл bootstrap/app.php и раскомментировал следующую строку ...

Dotenv::load(__DIR__.'/../');

Надеюсь, это поможет кому-то

0
ответ дан MrMesees 22 August 2018 в 06:27
поделиться

Добавить путь mysql.sock в файл database.php, как показано ниже.

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',

Eample

'mysql' => [
        'driver' => 'mysql',
        'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', '8889'),
13
ответ дан RaviNila 22 August 2018 в 06:27
поделиться
  • 1
    я бы дал вам 1000 upvotes !! Застрял с этим с 10 утра до сих пор, около 5 часов, и ничего не работало для меня, кроме вашего решения! Огромное спасибо. – schenker 30 December 2016 в 08:50

У меня были проблемы с доступом к моему сайту drupal, и у меня была проблема точно так же, как я исправил ее менее чем за 2 часа. Попробуйте в командной строке и перезапустите сервер или службу mysql. Введите это при регистрации в качестве пользователя root или суперпользователя, - service mysqld restart

Он должен работать. Если он не перезагружает ваш локальный веб-сервер, - service httpd restart

Этого должно быть достаточно. Надеюсь, что он работает и для других сред. Приветствия.

0
ответ дан RAWGIT 22 August 2018 в 06:27
поделиться

Ответ от @stuyam решил проблему «Нет такого файла или каталога» для меня

Краткий ответ: Измените «host» в файле /app/config/database.php с " localhost "до" 127.0.0.1 "

Но тогда у меня была ошибка« Connection failed ». Если у кого-то была такая же проблема, моим решением было обновить файл app / config / local / database.php, чтобы порт был 8889:

'mysql' => array(
        'driver'    => 'mysql',
        'host'      => '127.0.0.1',
        'port'      => '8889',
        'database'  => 'databaseName',
        'username'  => 'root',
        'password'  => 'root',
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
    ),
39
ответ дан stuyam 22 August 2018 в 06:27
поделиться
  • 1
    В моем случае это было 'port' => '33060', но этот ответ заставил меня туда! – mopo922 16 May 2015 в 22:53

Это связано с тем, что PDO обрабатывает хост «localhost» специально:

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

(из http://php.net/manual/en/ref.pdo -mysql.connection.php )

Изменение localhost на 127.0.0.1 «принудительно» использует TCP.

Примечание: mysqli_connect отлично работает с localhost.

6
ответ дан Thomas Decaux 22 August 2018 в 06:27
поделиться

Я столкнулся с этой проблемой при запуске PHPUnit в Elixir / Gulp и Homestead в качестве среды моего бродяга.

В моем случае я отредактировал файл .env с DB_HOST=localhost до DB_HOST=192.168.10.10, где 192.168.10.10 - это IP моего хозяина-бродяги / хозяина.

2
ответ дан user 22 August 2018 в 06:27
поделиться
1
ответ дан Alberto 5 November 2018 в 04:20
поделиться
520
ответ дан Community 5 November 2018 в 04:20
поделиться
3
ответ дан NuOne T Attygalle 5 November 2018 в 04:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: