2010-01-24 3 views
2

Essayer d'obtenir une configuration PHP/Zend Framework simple pour créer une base de données SQLite et la manipuler.PHP avec Zend Framework ne peut pas démarrer une base de données SQLite?

<?php 
require_once("Zend/Db.php"); // Zend framework 
$db = Zend_Db::factory('Pdo_Sqlite', array("dbname" => "./test.sqlite3")); 

$sql = "CREATE TABLE IF NOT EXISTS ".$db->quoteIdentifier("configs")." (".$db->quoteIdentifier("name")." TEXT NOT NULL PRIMARY KEY, ".$db->quoteIdentifier("value")." TEXT NOT NULL);"; 
echo $sql; 
$db->query($sql); 

Le SQL fait écho comme "CREATE TABLE IF NOT EXISTS "configs" ("name" TEXT NOT NULL PRIMARY KEY, "value" TEXT NOT NULL);", qui ressemble à droite.

Mais j'obtiens un 'Zend_Db_Statement_Exception' avec le message 'SQLSTATE [HY000]: Erreur générale: 14 impossible d'ouvrir le fichier de base de données'. J'ai essayé d'enlever le "./" principal sur la variable "dbname", et ai assuré que le dossier le dossier de PHP a dedans des permissions d'écriture pour chacun. J'ai même essayé de créer le fichier avec "touch test.sqlite3" et m'assurer qu'il était accessible en écriture pour tout le monde.

est d'utiliser PHP v5.2.10

+0

Pourriez-vous publier le code source de la méthode 'Zend_Db :: factory()'? –

+0

@Alix il est en ligne à http://framework.zend.com/code/browse/Zend_Framework/standard/trunk/library/Zend/Db.php?r=trunk – MidnightLightning

Répondre

4

votre code fonctionne ici (sur Windows). donc la syntaxe array("dbname" => "./test.sqlite3") n'est pas le problème. comme d'autres, je suppose que c'est un problème de permission.

quelques idées:

  • si vous exécutez le programme avec php en tant que module apache: ça marche si elle est exécutée à partir de la ligne de commande? quelles sont les permissions du fichier créé? Ajustez les permissions à l'utilisateur Apache en conséquence.
  • si ci-dessus ne pas travail: strace votre script() et vérifiez la sortie pour les erreurs de permission.
  • Le répertoire où ./test.sqlite3 doit être créé doit être lisible et accessible en écriture par l'utilisateur exécutant php. il est pas assez pour avoir un test.sqlite3 lisible et inscriptible, car sqlite lit et écrit également un fichier temporaire test.sqlite3-journal dans ce répertoire. assurez-vous que c'est.
  • essayez d'utiliser un chemin absolu pour le nom de la base de données.
  • assurez-vous que les extensions pdo et pdo_sqlite sont chargées (vérifiez la sortie de phpinfo()). aussi, voir qu'il n'y a pas de conflits entre le système et les bibliothèques sqlite groupées php.
+1

Merci Axe, je ne savais pas SQLite avait besoin d'un temporaire fichier journal aussi. Il s'avère que je n'avais pas correctement défini les autorisations sur le dossier pour permettre à tout le monde d'y écrire, et une fois que j'ai corrigé cela, tout était génial! – MidnightLightning

+0

LOUER LE LAWDZ. J'ai essayé de comprendre pendant presque 3 heures effinentes pourquoi mon application n'écrivait pas à la base de données sqlite. Comme vous l'avez dit, j'ai dû définir des permissions sur le fichier .sqlite et son répertoire. MERCI, hache. –

+0

Dans mon cas, pour travailler, je viens de définir les autorisations (w/r) pour le fichier .db et aussi pour le dossier de la base de données. –

Questions connexes