Domanda

Oggi ho rimosso e reinstallato l'ultima versione di lampp per passare a php 5.30 e improvvisamente un'app molto semplice non riesce a connettersi al database mysql. Sto usando PDO per connettermi e ricevo il seguente errore:

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

Al momento non sto rilevando l'errore, per motivi di debug.

Il seguente codice è sufficiente per replicare il problema sul mio sistema:

<?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;
?>

Guardando online, ho trovato una o due altre persone con lo stesso problema, ma nessuna di loro ha ricevuto una risposta, tanto meno una funzionante. Qualcuno sa cosa sta succedendo? C'è qualcosa che mi è sfuggito nella configurazione? Cosa devo fare per risolverlo?

È stato utile?

Soluzione

Di solito significa che è necessario specificare TCP / IP (1) o dire a MySQL dove si trova il socket Unix (2):

  1. " mysql: host = 127.0.0.1 " oppure " mysql: host = localhost; porta = 3306 "
  2. " mysql: unix_socket = / var / run / mysqld / mysqld.sock "

Altri suggerimenti

Puoi anche utilizzare 127.0.0.1, anziché specificare "localhost" nella stringa di connessione db per evitare del tutto questo problema.

Potresti voler modificare php.ini in modo che il PDO possa trovare mysql.sock specificando il pdo_mysql.default_socket = /opt/lampp/var/mysql/mysql.sock (nel caso di xampp ). Non dimenticare di riavviare Apache dopo aver modificato php.ini.

(Siamo spiacenti, questa sembra essere una soluzione ripetuta).

Sto usando MAMP 2.0.1 e Symfony 1.4 con Doctrine per questo progetto.

La terza opzione ha funzionato per me con una piccola modifica: in /config/database.yml

dsn: 'mysql:unix_socket=/Applications/MAMP/tmp/mysql/mysql.sock;dbname=MY_DB_NAME;'

La causa più comune di un errore del genere è che MySQL non è in esecuzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top