Если ваше представление основано на модели, и вы создали элементы управления внутри тегов <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');
Сообщение об ошибке указывает, что соединение MySQL через сокет проверено (что не поддерживается).
В контексте Laravel (ремесленник) вы, вероятно, захотите использовать другую / правильную среду. Например: php artisan migrate --env=production
(или какая-либо окружающая среда). См. здесь .
Это правильный ответ для меня. Я отключил опцию pdo_mysql.default_socket
в моем php.ini и установил хост базы данных в 127.0.0.1
.
У меня такая же проблема, и я запускаю Mac OS X 10.10 Yosemite. Я включил Apache Server и PHP, которые уже поставляются с ОС. Затем я только что настроил библиотеку mCrypt для начала работы. После этого, когда я работал с моделями и DB, я получил ошибку:
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
Причина, по которой я нашел, - это просто потому, что PHP и MySQL не могут подключиться сами. Чтобы устранить эту проблему, я следую следующим шагам:
mysql -u root -p
mysql> show variables like '%sock%'
+-----------------------------------------+-----------------+
| Variable_name | Value |
+-----------------------------------------+-----------------+
| performance_schema_max_socket_classes | 10 |
| performance_schema_max_socket_instances | 322 |
| socket | /tmp/mysql.sock |
+-----------------------------------------+-----------------+
/tmp/mysql.sock
'unix_socket' => '/tmp/mysql.sock'
'mysql' => array(
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'SchoolBoard',
'username' => 'root',
'password' => 'venturaa',
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'unix_socket' => '/tmp/mysql.sock',
),
Теперь просто сохраните изменения и перезагрузите страницу, и она должна работать! Надеюсь, это может быть полезно!
Попытка подключения к 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.
Я работаю на MAMP Pro и сталкивался с подобной проблемой при попытке переноса (создание таблиц db). Пробовал некоторые из этих упомянутых предложений, но не сделал этого для меня.
Итак, просто (через час googling), я добавил две вещи в /config/database.php.
'port' => '1234',
'unix_socket' => '/path/to/my/socket/mysqld.sock'
Теперь работает отлично!
В этом случае я просто использовал
vagrant up
вместо
homestead up
для моей настройки личинок кузницы с использованием усадьбы. Я предполагаю, что это означало, что сайт обслуживался, но сервер MySQL никогда не загружался. Когда я использовал последнюю команду для запуска моего бродячего бокса, ошибка исчезла.
В моем случае я запускал php artisan migrate на моем терминале Mac, когда мне нужно было ssh в бродягу и запустить его оттуда. Надежда, которая помогает кому-то в головной боли.
В моем случае у меня вообще не было проблем, просто забыл запустить службу mysql ...
sudo service mysqld start
При использовании VirtualMachine убедитесь, что вы ssh на этом компьютере, и перейдите в свою папку App и вызовите команду миграции php artisan.
Основываясь на ответе @dcarrith ...
Вместо редактирования файлов конфигурации я создал псевдоним в местоположении, которое ищет PHP, которое подключается к реальному mysql.sock. ( source )
Просто запустите эти две команды (не требуется перезагрузка):
mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock
localhost
не работает, а 127.0.0.1
делает?
– Justin
18 October 2014 в 03:35
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
Это исправлено это для меня.
localhost
= & gt; 127.0.0.1
– StrikeForceZero
6 October 2015 в 23:31
Если вы используете 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
Проверьте свой порт внимательно. В моем случае это было 8889, и я использую 8888. измените «DB_HOST» с «localhost» на «127.0.0.1» и наоборот
Это случилось со мной, потому что 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, исправил проблему.
Если вы используете Laravel Homestead, убедитесь, что вы вызываете команды на сервере.
homestead ssh
Затем просто введите cd в нужный каталог и запустите команду.
source ~/.zshrc
2. homestead up --provision
3. homestead ssh
– Marcel
9 February 2017 в 03:58
Найдите путь к вашему unix_socket, для этого просто запустите netstat -ln | grep mysql
Вы должны получить что-то вроде этого
unix 2 [ ACC ] STREAM LISTENING 17397 /var/run/mysqld/mysqld.sock
Возьмите это и добавьте его в свой параметр 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' <-----
),
),
Надеюсь, что это поможет !!
[Это устарело, информация о базе данных сохраняется в .env now]. Более простой способ решить проблему - редактировать
app/config/local/database.php
:)
Изменить базу данных конфигурации здесь, и он должен работать
Начиная с 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
Все эти ответы кажутся тяжелой лифтингом ...
Я только что создал файл .env
; отредактировал мой файл bootstrap/app.php
и раскомментировал следующую строку ...
Dotenv::load(__DIR__.'/../');
Надеюсь, это поможет кому-то
Добавить путь 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'),
У меня были проблемы с доступом к моему сайту drupal, и у меня была проблема точно так же, как я исправил ее менее чем за 2 часа. Попробуйте в командной строке и перезапустите сервер или службу mysql. Введите это при регистрации в качестве пользователя root или суперпользователя, - service mysqld restart
Он должен работать. Если он не перезагружает ваш локальный веб-сервер, - service httpd restart
Этого должно быть достаточно. Надеюсь, что он работает и для других сред. Приветствия.
Ответ от @stuyam решил проблему «Нет такого файла или каталога» для меня
Краткий ответ: Измените «host» в файле /app/config/database.php с " localhost "до" 127.0.0.1 "
blockquote>Но тогда у меня была ошибка« 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' => '', ),
'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.
Я столкнулся с этой проблемой при запуске PHPUnit в Elixir / Gulp и Homestead в качестве среды моего бродяга.
В моем случае я отредактировал файл .env с DB_HOST=localhost
до DB_HOST=192.168.10.10
, где 192.168.10.10
- это IP моего хозяина-бродяги / хозяина.