Сегодня я удалил и переустановил последнюю версию фонаря, чтобы перейти на php 5.30, и вдруг очень простое приложение не может подключиться к базе данных mysql. Я использую PDO для подключения и получаю следующую ошибку:
Warning: PDO::__construct() [pdo.--construct]: [2002] Invalid argument (trying to connect via unix://) in /home/raistlin/www/todoapp/home.php on line 9 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [2002] Invalid argument' in /home/raistlin/www/todoapp/home.php:9 Stack trace: #0 /home/raistlin/www/todoapp/home.php(9): PDO->__construct('mysql:host=loca...', 'USER', 'PASSWORD') #1 {main} thrown in /home/raistlin/www/todoapp/home.php on line 9
Я не поймаю ошибку на данный момент, ради ее отладки.
Для копирования этой проблемы в моей системе достаточно следующего кода:
<?php $DBACCESS = array( "connstring"=>"mysql:host=localhost;dbname=todoapp", "host"=>"localhost", "user"=>"user", "password"=>"password", "todoapp"=>"todoapp" ); echo implode('<br \>',$DBACCESS); $dbh = new PDO($DBACCESS['connstring'],$DBACCESS['user'],$DBACCESS['password']); $dbh = null; ?>
Глядя в онлайн, я нашел одного или двух других людей с той же проблемой, но ни один из них не получил ответа, а тем более рабочего. Кто-нибудь знает, что происходит? Есть что-то, что я пропустил в конфигурации? Что мне нужно сделать, чтобы исправить это?
Обычно это означает, что вам нужно указать TCP / IP (1) или сообщить MySQL, где ваш сокет Unix (2):
Вы также можете использовать 127.0.0.1, а не указывать «localhost», в строке подключения db, чтобы избежать этой проблемы.
Возможно, вы захотите изменить php.ini, чтобы PDO мог найти mysql.sock, указав pdo_mysql.default_socket = /opt/lampp/var/mysql/mysql.sock
(в случае xampp). Не забудьте перезапустить Apache после изменения php.ini.
(Извините, это похоже на повторное решение).
Я использую MAMP 2.0.1 и Symfony 1.4 с Doctrine для этого проекта.
Третий вариант работал для меня с небольшой модификацией: в /config/databases.yml
dsn: 'mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=MY_DB_NAME;'
Наиболее распространенной причиной такой ошибки может быть то, что MySQL не работает.