11
votes

SQLite Correct Path / Uri pour PHP PDO sous Windows

[ante-scriptum: il s'agit d'une question de réponse auto-réponse, vous n'avez pas besoin de la peine de répondre]

J'ai couru dans un problème de configuration étrange, non documenté n'importe où sur le page php.net spécifique ou à Stackoverflow.

le problème

Lors de l'ouverture d'une base de données SQLite existante sur Windows, la même erreur est conservée indiquant:

sqlstate [HY000] [14] Impossible de Ouvrir le fichier de base de données

bien que le code exécuté soit copié / collé du manuel: xxx

Je n'ai pu ouvrir cette base de données, comme je avait essayé toutes sortes de divers DSN tout en googling:

dsn = 'sqlite: / c: \\ complet \\ chemin \\ to \\ db'; // - failed -

$ DSN = 'sqlite: // c: / complet / chemin / chemin / à / db'; // - failed -


3 commentaires

Bon travail. Dès que je peux voter à nouveau, cela obtient un +1 de moi depuis que vous avez posté votre propre réponse!


@Matnadrofsky Merci pour cela et merci pour votre édition, j'apprécie aussi l'anglais correct aussi!


@Matnadrofsky Solution Publié, m'a finalement 2 jours de plus


4 Réponses :


21
votes

la solution

Notez la simple barre oblique dans le DSN SQLite: / ? Il suffit de le laisser tomber!

Écrivez votre DSN comme ceci:

sqlite: nom.db .

Cela fonctionne avec relative et absolu SO:

$ dsn = 'sqlite: c: \ complet \ path \ to \ nom.db'; // --works -

$ dsn = 'sqlite: .. \ data \ nom.db'; // --works -

$ dsn = 'sqlite: nom.db'; // --works -

J'espère que cela vous fera économiser du temps à l'avenir!


3 commentaires

Je ne sais pas quand il s'est arrêté, mais cela ne semble plus fonctionner avec des chemins relatifs plus ( Voir Docs ).


@dhobbs, l'avez-vous testé dans la pratique? Les chemins relatifs fonctionnent avec PHP 5.4, malgré la documentation était la même chose à l'époque .


@user, j'ai rencontré l'incapacité d'utiliser un chemin relatif à ce moment-là, c'est pourquoi j'ai fini de commenter ici, mais je n'ai plus ce projet et je ne me souviens plus de tous les détails.



2
votes

juste une petite annexe à @Justin Réponse:

Vous pouvez également utiliser le style de chemin Linux sur Windows: P>

$dsn = 'sqlite:c:/full/path/to/name.db';


0 commentaires

0
votes

mieux que PDO ('SQLite: ...') est d'utiliser php sqlite3 extension et son sqlite3 classe. J'ai essayé vos conseils ci-dessus avec une base de données sur un lecteur externe (dur) et il n'a pas fonctionné (donnant toujours la même erreur que celle mentionnée dans le premier message par @ Justin-T). Ensuite, j'ai essayé avec sqlite3 classe et ... hurray! Cela a fonctionné!

(juste pour ceux qui se demandent à propos de PDO et beaucoup de ses bugs étranges.)


0 commentaires

0
votes

Vérifiez si votre installation PHP a activé des extensions pour SQLite et / ou SQLite3.

Je n'ai du mal à trouver un problème similaire pour constater qu'il a rejeté mon DSN parce que SQLite était désactivé.


0 commentaires