Подтвердить что ты не робот

Ошибка при создании соединения с PDO в PHP

Сегодня я удалил и переустановил последнюю версию lampp, чтобы перейти на 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;
?>

В онлайн-поиске я нашел одного или двух других людей с одинаковой проблемой, но ни один из них не получил ответа, а тем более рабочего. Кто-нибудь знает, что происходит? Есть что-то, что я пропустил в конфигурации? Что мне нужно сделать, чтобы исправить это?

4b9b3361

Ответ 1

Обычно это означает, что вам нужно указать TCP/IP (1) или сообщить MySQL, где ваш Unix-сокет (2):

  • "mysql: host = 127.0.0.1" или "mysql: host = localhost; port = 3306"
  • "MySQL: UNIX_SOCKET =/вар/запустить/туздЫ/mysqld.sock"

Ответ 2

Вы также можете использовать 127.0.0.1, а не указывать "localhost" в своей строке подключения к db, чтобы избежать этой проблемы вообще.

Ответ 3

Возможно, вы захотите изменить php.ini, чтобы PDO мог найти mysql.sock, указав pdo_mysql.default_socket = /opt/lampp/var/mysql/mysql.sock (в случае xampp). Не забудьте перезапустить Apache после изменения php.ini.

(Извините, это похоже на повторное решение).

Ответ 4

Я использую 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;'

Ответ 5

Наиболее распространенной причиной такой ошибки может быть то, что MySQL не работает.