PDO sqlite et INSERT

kny
Eléphanteau du PHP | 47 Messages

30 mai 2012, 16:53

Bonjour,

Voici pour commencer quelques informations:
- Serveur: GNU/Linux Debian 6 Squeeze
- Tourne sous Lighttpd
- sqlite3 et php-sqlite sont installés

Je recherche à faire un INSERT par le biais de PDO dans une base Sqlite v3.
Pour faire un SELECT sur cette même base, je procède comme suit. Et ce la marche formidablement bien.
<?php
 
     try {
 
         $dbh = new PDO('sqlite:pth/to/my/base.sdb');
 
         $sql = 'SELECT * FROM articles WHERE id = :id';
         $sth = $dbh->prepare($sql);
         $sth->execute( array ( ':id' => 1 ) );
         $res = $sth->fetchAll(PDO::FETCH_ASSOC);
         
         print_r ( $res );
     
     } catch (PDOException $e ) {
         
         print "Erreur!: " . $e->getMessage() . "<br/>";
         die();
     
     }
 
 ?>
Mais pour un insert que voici:
<?php
 
     try {
 
         $dbh = new PDO('sqlite:pth/to/my/base.sdb');
 
         $title = 'New title';
         $content = 'New content';
         $sql = "INSERT INTO articles ( title, content ) VALUES ( :title , :content )";
         $sth = $dbh->prepare($sql);
         $sth->bindParam(':title', $title);
         $sth->bindParam(':content', $content);
         $sth->execute( );
         $res = $sth->rowCount();
         
         print_r ( $res );
     
     } catch (PDOException $e ) {
         
         print "Erreur!: " . $e->getMessage() . "<br/>";
         die();
     
     }
 
 ?>
J'ai utilisé bindParam pour voir si le fait de passer les paramètres en array bloquaient pour une raison ou pour une autre, mais aussi la version sans binding, et cela ne change absolument rien:
Je n'obtiens aucune erreur, mais aucun enregistrements non plus...
Cette même requête directement avec sqlite3 fonctionne évidemment.

Je suis un peu perdu, ne trouvant pas trop d'éléments de pistes sur la toile.
Aussi toutes idées seront les bienvenue!

En vous remerciant.

kny
Eléphanteau du PHP | 47 Messages

31 mai 2012, 17:33

Un peu de nouveau:
Je n'affichais pas les erreurs (oubli d'ajout d'attribut), aussi voici ce que j'obtiens désormais:

Code : Tout sélectionner

General error 14: unable to open database file
J'ai donc directement pensé à un souci de permissions, or les droits sont complets pour quiconque (777 si vous préférez).
C'est ce qui me paraissait logique dans un premier temps puisqu'il accédait en lecture mais pas en écriture, mais après coup pourquoi une impossibilité d'ouvrir seulement.
Il ne devrait pouvoir ouvrir pour la lecture non plus!

Je suis un peu perdu...

ViPHP
ViPHP | 2287 Messages

31 mai 2012, 17:39

Bonjour,

Essaye de voir si cette page de manuel (et les commentaires) répondent à ta question (problèmes de versions divergentes de sqlite...) :
http://fr.php.net/manual/fr/ref.pdo-sqlite.php

En désespoir de cause il faudra sûrement recréer le fichier sur ton serveur à partir d'un export SQL.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

ViPHP
AB
ViPHP | 5818 Messages

31 mai 2012, 18:11

Au niveau des droits sur les fichiers je me souviens que pour utiliser LOAD DATA INFILE c'est mysql qui doit donner les droits (et pas simplement changer les droits des fichiers en dehors de mysql ).

Peut-être pareil avec Sqlite v3 ? Simple piste au hasard car pour l'instant je n'utilise Sqlite qu'en mémoire.

Sinon en plus des fichiers t'a vérifier les droits sur tes dossiers ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

31 mai 2012, 22:37

Pour SQLite, il faut que l'utilisateur ait les mêmes droits sur le dossier que sur le fichier de la base de données
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

kny
Eléphanteau du PHP | 47 Messages

01 juin 2012, 13:35

Pour SQLite, il faut que l'utilisateur ait les mêmes droits sur le dossier que sur le fichier de la base de données
Merci beaucoup, c'était effectivement le maillon problématique.

Petit nouveau ! | 1 Messages

23 oct. 2013, 15:07

bonjour. oui mais moi je veux savoir comment avoir les droit sur mon hébergeur OVH?. je peux faire la requette select seulement. les requête UPDATE (create, insert, delete) ne marchent pas sur le server (mon fichier de base données SQLIte). alors que sur WAMP tout est propre.


Message d'erreur: "

Code : Tout sélectionner

Warning: SQLite3::query(): Unable to execute statement: attempt to write a readonly database in

ViPHP
xTG
ViPHP | 7331 Messages

23 oct. 2013, 17:56

Il faut que ton utilisateur ait les droits sur le fichier. Comme dis juste au dessus. ;)

Mammouth du PHP | 1511 Messages

26 oct. 2013, 20:01

Hello,
tu dois changer le chmod de ton fichier de base de données, afin de donner les droits de lecture/ecriture à l'utilisateur courant.
Tu peux le faire via ton client FTP.