Ошибка при создании подключения к PDO в PHP - PullRequest
25 голосов
/ 17 сентября 2009

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

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

Ответы [ 5 ]

51 голосов
/ 17 сентября 2009

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

  1. "mysql: host = 127.0.0.1" или "mysql: host = localhost; порт = 3306"
  2. "MySQL: UNIX_SOCKET = / вар / запустить / туздЫ / mysqld.sock"
24 голосов
/ 12 февраля 2010

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

9 голосов
/ 19 ноября 2009

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

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

4 голосов
/ 20 июля 2011

Я использую 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;'
2 голосов
/ 17 сентября 2009

Наиболее распространенная причина такой ошибки - MySQL не работает.

...