2010-01-11 3 views
2

Je suis capable de récupérer des informations à partir d'une base de données SQLite en PHP, mais pas de lui écrire. Par exemple, ce code fonctionne parfaitement bien:Pourquoi utiliser SELECT mais pas INSERT sur une base de données SQLite en PHP?

$db = new PDO("sqlite:foo.db"); 
$rowCount = $db->query("SELECT COUNT(*) FROM tblname;")->fetchColumn(0); 
echo $rowCount; // works as it should 

Cependant, les résultats de l'extrait de code suivant dans un « incapable d'ouvrir le fichier de base de données » erreur:

$db = new PDO("sqlite:foo.db"); 
$db->exec("INSERT INTO tblname VALUES(NULL, 'val1', 'val2');") or die(print_r($db->errorInfo(), true)); 

Quand je réalise l'INSERT ci-dessus de la commande ligne plutôt que dans PHP, je reçois les résultats attendus (une nouvelle ligne à tblname):

$ sqlite3 foo.db 
sqlite> INSERT INTO tblname VALUES(NULL, 'val1', 'val2'); 

Ceci est ma première fois à l'aide PDOs (ou SQLite pour cette matière) de sorte que toute aide serait grandement apprécia ted.

+0

Est-ce que votre serveur Web (apache/php ou autre) a un accès en écriture à la base de données? –

Répondre

10

Vérifiez que l'utilisateur exécutant le script PHP a l'autorisation d'écrire foo.db.

Aussi (de mémoire, corrigez-moi si je me trompe) l'utilisateur aura besoin d'une autorisation d'écriture sur le répertoire contenant foo.db, sinon SQLite3 lancera un message d'erreur pas si utile.

+0

J'ai vérifié que la base de données et le répertoire dans lequel elle réside sont tous deux accessibles en écriture, mais cela ne semble pas changer quoi que ce soit. –

+0

Essayez d'utiliser un chemin absolu vers foo.db dans votre code, juste pour exclure toute différence de répertoire de travail qui peut arriver ... – oops

+0

"Vérifiez que l'utilisateur exécute le script PHP ..." C'était le problème. Mon utilisateur normal était celui avec des autorisations d'écriture, pas l'utilisateur qui exécutait réellement le script. Merci. –

2

Vous ne disposez probablement pas d'un accès en écriture au fichier sqllite. Vérifiez le message d'erreur que vous obtenez formulaire PDO avec PDO::errorInfo

Questions connexes