Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/12/2015, à 23:14

gaffeur

PHP - SQLite : Update sans effet ... [Résolu]

Bonjour,

Je rencontre un problème avec la SQLite ; je ne parviens pas à faie un UPDATE (scipte PHP).
Le scripte s'execute sans erreur, mais ne met pas la base à jour ? ...
Après avoir passé en revue une cinquantaine de blogs, à la recherche d'une solution ;  je ne voie toujours pas de solution ...

le code est le suivant :

try {
$db = new PDO('sqlite:../data/base.sqlite');

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION, PDO::ATTR_PERSISTENT);

$update = $db->prepare('UPDATE `horaires` SET `fermeture` = "18" WHERE `id` = 2');

$update->execute();
$db = NULL;
}
catch(PDOException $e)
{
echo $e->getMessage();
}

Merci de vos remarques ! ... ;-)

Dernière modification par gaffeur (Le 27/12/2015, à 16:31)


Celui qui pose des questions apprend. Celui qui croit tout savoir n'apprend rien ! ...

Hors ligne

#2 Le 15/12/2015, à 00:13

tiramiseb

Re : PHP - SQLite : Update sans effet ... [Résolu]

Je ne sais pas du tout comment ça devrait fonctionner en PHP, mais il y a un truc qui me chiffonne : pas une fois tu ne sauvegardes le fichier ni ne ferme proprement la base... J'aurais imaginé au moins un "$db->close()" ou un truc dans le genre...

Hors ligne

#3 Le 15/12/2015, à 11:09

claudius01

Re : PHP - SQLite : Update sans effet ... [Résolu]

Bonjour,

Je ne pratique pas quotidiennement PHP + SQLITE mais j'aurai tendance à penser que ton code est correct au vu de mes recherches sur la toile...

Maintenant, peux-tu rejoindre un cas tel quel bien présenté et voir son comportement quitte ensuite à l'expurger et à l'adapter naturellement afin de retrouver ton cas précis pour un lever de doute incontournable...

Cette stratégie consiste à ne pas chercher pourquoi "mon cas" (enfin le tien !) ne fonctionne pas mais plutôt à comprendre pourquoi un autre cas à priori correct fonctionne et en général, après c'est beaucoup plus clair et encourageant (du moins, je te le souhaite ;-).

Cf. entre autre un exemple qui ressemble au tien bien que plus complet: PHP / PDO / SQLite3 Example

Dernière modification par claudius01 (Le 15/12/2015, à 11:50)

Hors ligne

#4 Le 15/12/2015, à 11:52

pires57

Re : PHP - SQLite : Update sans effet ... [Résolu]

Es tu sur que les libs sqlites PHP sont activé?


Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#5 Le 15/12/2015, à 21:14

gaffeur

Re : PHP - SQLite : Update sans effet ... [Résolu]

...

@tiramiseb :
... c'est en mode objet ; la connexion persiste tant que l'objet PDO existe. Étant donné que j'annule l'objet par

$db = NULL;

c'est suffisant car la fermeture est faite par une méthode [(magique__destruct)]de la classe PDO. C'est l'avantage de la programmation orienté objet ...

@claudius01  @pires57 :
Merci de ton conseil, mais j'avais déjà consulté ce lien ; et comme tu dis, j'ai reproduit pas mal d'exemple, mais rien de fonctionne ...Il y a un truc qui m'échappe ! ...
Et ma config serveur est correcte : les libs, le driver PDO, les droits d'accès au fichier .sqlite ...

Je comprends pas, j'ai même relu la doc officielle de SQLite , concernant la fonction update,
https://www.sqlite.org/

je bloque totalement  ... y a truc à la con qui me vient pas à l'esprit ... ...

Dernière modification par gaffeur (Le 16/12/2015, à 00:47)


Celui qui pose des questions apprend. Celui qui croit tout savoir n'apprend rien ! ...

Hors ligne

#6 Le 15/12/2015, à 21:25

tiramiseb

Re : PHP - SQLite : Update sans effet ... [Résolu]

c'est suffisant car la fermeture est faite par une méthode [(magique__destruct)]de la classe PDO. C'est l'avantage de programmation orienté objet ...

Ce n'est pas une propriété liée à la programmation orientée objet. Je ne connaissais pas ce principe de destructeur "magique", ne programmant pas en PHP...
J'imagine que c'est plus ou moins lié au garbage collector...

Cela dit, en Python cela peut passer par un destructeur aussi, mais en général on ferme tout de même explicitement...
explicit is better than implicit, seconde ligne du Zen of Python smile.

je bloque totalement  ... y a truc à la con qui me vient pas à l'esprit ... ...

À tout hasard, l'utilisateur qui exécute ce script PHP (www-data ?) a-t-il le droit d'écriture sur le fichier ?

Hors ligne

#7 Le 15/12/2015, à 23:46

pires57

Re : PHP - SQLite : Update sans effet ... [Résolu]

C'est surtout moche, le plus propre c'est d'utiliser unset()


Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#8 Le 16/12/2015, à 11:26

bruno

Re : PHP - SQLite : Update sans effet ... [Résolu]

Bonjour,

D'abord, pour clore la connexion c'est effectivement la bonne méthode qui est utilisée (cf. http://php.net/manual/fr/pdo.connections.php) et le code PHP semble correct.

Le fait que tu n'aies pas d'erreur de connexion mais que ta requête échoue me fait penser à un problème de versions Sqlite. Quelles sont les versions utilisées par ta base de données et par ton module PHP ? Peux-tu vérifier, avec phpinfo() par exemple, les modules activés ?

Hors ligne

#9 Le 16/12/2015, à 14:02

claudius01

Re : PHP - SQLite : Update sans effet ... [Résolu]

Bonjour,

Une question peut-être idiote et stupide: Et si une erreur non catchée se produisait ?!..
Je ne connais pas assez le PHP pour proposer un morceau de code qui catcherait toutes les exceptions en plus de PDOException...

À suivre ;-O)

Hors ligne

#10 Le 16/12/2015, à 20:11

Compte anonymisé

Re : PHP - SQLite : Update sans effet ... [Résolu]

$update = $db->prepare('UPDATE `horaires` SET `fermeture` = "18" WHERE `id` = 2');

En rajoutant COMMIT; à la fin de la requête ?

#11 Le 16/12/2015, à 22:30

claudius01

Re : PHP - SQLite : Update sans effet ... [Résolu]

Cela est une bonne idée, mais sauf erreur de part, d'après § 7.0 Transaction Control At The SQL Level, SQLite est par défaut en mode autocommit. De plus, on peut lire:

The SQL command "COMMIT" does not actually commit the changes to disk. It just turns autocommit back on. Then, at the conclusion of the command, the regular autocommit logic takes over and causes the actual commit to disk to occur. The SQL command "ROLLBACK" also operates by turning autocommit back on, but it also sets a flag that tells the autocommit logic to rollback rather than commit.

Mais peut-être que dans la version utilisée cela n'est pas le cas ou que tout simplement la transaction n'est pas terminée ?!..

Dernière modification par claudius01 (Le 16/12/2015, à 22:37)

Hors ligne

#12 Le 26/12/2015, à 18:55

gaffeur

Re : PHP - SQLite : Update sans effet ... [Résolu]

... au passage, bonnes fêtes à tous ! ... wink


@Bruno : Oui, les modules sont bien activés ; j'ai un PDO Driver pour SQLite 3.x et la library 3.8.2

... et le fichier "data" est bien ouvert en écriture pour www-data.


Celui qui pose des questions apprend. Celui qui croit tout savoir n'apprend rien ! ...

Hors ligne

#13 Le 27/12/2015, à 16:30

gaffeur

Re : PHP - SQLite : Update sans effet ... [Résolu]

Bon, en fait, après quelques débogues, je me suis aperçu que le problème ne venait pas de la syntaxe de mon scripte (php) servant à "updater" la base de données ; mais venait en fait de mon formulaire, qui ne renvoyait aucune donnée  ...  car la valeur de la propriété "enctype"  était mal renseignée !

Mea culpa  ; et désolé de vous avoir fait cogiter pour rien ! ... roll

Et pour clarifier les choses, le script énoncé au début de ce post est correct ; il fonctionne parfaitement !

Dernière modification par gaffeur (Le 27/12/2015, à 18:47)


Celui qui pose des questions apprend. Celui qui croit tout savoir n'apprend rien ! ...

Hors ligne