sqlite chemin d'accès correct/URI pour php pdo sur windows
[ante-scriptum : c'est une auto qui répond à la question, vous n'avez pas besoin de s'embêter à répondre]
Je suis tombé sur un drôle de problème de configuration, ce n'est pas documenté n'importe où sur la spécifique PHP.net page ou à StackOverflow.
Le problème
Lors de l'ouverture d'un existant de base de données sqlite sur Windows, le même message d'erreur ne cessaient de :
SQLSTATE[HY000] [14] Unable To Open Database File
Bien que le code exécuté est un copier/collé à partir du manuel :
<?php
/* Connect to an ODBC database using driver invocation */
$dsn = 'sqlite:/full/path/to/db';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>
Je ne pouvais pas ouvrir cette base de données, comme je l'avais essayé toutes sortes de divers DSN pendant googler :
$dsn = 'sqlite:/c:\\full\\path\\to\\db'; //--FAILED--
$dsn = 'sqlite://c:/full/path/to/db'; //--FAILED--
Merci pour ça, et merci pour votre montage, j'apprécie l'anglais correct aussi !
solution posté, m'enfin 2 jours de plus
OriginalL'auteur Justin T. | 2011-12-29
Vous devez vous connecter pour publier un commentaire.
La solution
Avis de la simple barre oblique dans la DSN
sqlite:/
? Il suffit de le déposer !écrire votre DSN comme ceci :
sqlite:name.db
.Cela fonctionne avec relative et absolue parcours :
$dsn = 'sqlite:c:\full\path\to\name.db'; //--WORKS--
$dsn = 'sqlite:..\data\name.db'; //--WORKS--
$dsn = 'sqlite:name.db'; //--WORKS--
Espère qu'elle vous fera économiser temps dans le futur !
OriginalL'auteur Justin T.
Juste un petit ajout à @justin réponse:
Vous pouvez également utiliser le linux chemin de style sur windows:
OriginalL'auteur Pedro Lobito
Mieux que
PDO('sqlite:...')
est d'utiliser PHPsqlite3
extension et sonSQLite3
classe. J'ai essayé vos conseils ci-dessus avec une base de données externe (dur)en voiture et ça ne fonctionne pas (en donnant toujours le même message d'erreur tel que mentionné dans le premier post de @justin-t). Puis j'ai essayé avecSQLite3
classe et... Hourra! Il a travaillé!(Juste pour ceux qui s'interrogent sur les AOP et beaucoup de ses étranges bugs.)
OriginalL'auteur Kubo2
Vérifier si votre installation de PHP est activé extensions pour sqlite et/ou sqlite3.
J'ai été aux prises avec un problème similaire, seulement pour trouver qu'il a rejeté ma DSN parce que sqlite a été désactivé.
OriginalL'auteur Roberto Halys Ortuño