DELETE FROM `users` WHERE `last_visit` < `2021-01-01 00:00:00`

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : DELETE FROM `users` WHERE `last_visit` < `2021-01-01 00:00:00`

Re: DELETE FROM `users` WHERE `last_visit` < `2021-01-01 00:00:00`

par hikaru-59 » 25 avr. 2021, 22:54

Si, j'ai bien fait execute :

Code : Tout sélectionner

$query->execute(); $count = $query->rowCount(); // Obtient le nb de lignes effacées. Ca marche pour la requete préparée
J'ai fait un test avec la méthode sans requete prepare. C'est très bizarre, cela marche si je fais rowCount() avant execute :

Code : Tout sélectionner

$count = $query->rowCount(); // Obtient le nb de lignes effacées. Ca marche sans requete prepare $query->execute(); // $count = $query->rowCount(); // Ne marche pas ici

Re: DELETE FROM `users` WHERE `last_visit` < `2021-01-01 00:00:00`

par @rthur » 25 avr. 2021, 20:53

https://www.php.net/manual/fr/pdostatement.rowcount.php
rowCount — Retourne le nombre de lignes affectées par le dernier appel à la fonction execute()
Du coup si tu ne fais pas d'execute() bah ça retourne 0...

Re: DELETE FROM `users` WHERE `last_visit` < `2021-01-01 00:00:00`

par hikaru-59 » 25 avr. 2021, 15:40

Merci, ça marche :

Code : Tout sélectionner

$query = $db->query("DELETE FROM users WHERE last_visit < '$last_login'");
Par contre, bizarrement :

Code : Tout sélectionner

$count = $query->rowCount();

n'a pas l'air de marcher avec la méthode sans prepare. J'obtiens 0 tout le temps. Alors qu'avec la méthode prepare, ça marchait bien.

Comment ça se fait ?

Re: DELETE FROM `users` WHERE `last_visit` < `2021-01-01 00:00:00`

par or 1 » 25 avr. 2021, 15:13

il faut donner une valeur à $query avant de l'utiliser.

Re: DELETE FROM `users` WHERE `last_visit` < `2021-01-01 00:00:00`

par hikaru-59 » 25 avr. 2021, 15:08

En fait, c'est bon, ça marche avec la méthode prepare.

C'était avec la méthode sans prepare qui ne marchait pas. Je sais qu'il ne faut pas faire, mais j'aimerais quand même comprendre pourquoi ça ne marche pas :

Code : Tout sélectionner

$last_login = '2021-01-01'; // Pour test $db->query("DELETE FROM users WHERE last_visit < $last_login"); // $db->query("DELETE FROM users WHERE last_visit < '$last_login'"); // Ne marche pas non plus if ($query->execute()) { $count = $query->rowCount(); // rowCount() retourne le nombre de lignes effacées dans la BDD echo "<p>$count membre(s) inactif(s) depuis le $last_login supprimé(s) !</p>"; }
Est-ce un problème de syntaxe ?

Message d'erreur sur la ligne : if ($query->execute()) :
Notice: Undefined variable: query in ... on line 72

Fatal error: Uncaught Error: Call to a member function execute() on null in ... :72 Stack trace: #0 {main} thrown in ... on line 72

Re: DELETE FROM `users` WHERE `last_visit` < `2021-01-01 00:00:00`

par @rthur » 25 avr. 2021, 14:02

Si ce n'est pas déjà fait, utilise la gestion d'erreurs PDO à PDO::ERRMODE_WARNING, ça aide beaucoup lors du débugage
https://www.php.net/manual/fr/pdo.error-handling.php

Re: DELETE FROM `users` WHERE `last_visit` < `2021-01-01 00:00:00`

par hikaru » 25 avr. 2021, 13:30

C'est bon, j'ai trouvé. Il ne fallait pas mettre `` mais des guillemets comme ça autour des dates : ''

Maintenant, je dois mettre le code php :

Code : Tout sélectionner

$last_login = '2013-01-01'; // Pour test $query = $db->prepare("DELETE FROM users WHERE last_visit < :last_login"); $query->bindValue(':last_login', $last_login, PDO::PARAM_STR); if ($query->execute()) { echo '<h2>Les membres inactifs ont été supprimés !</h2>'; }
Là, ça ne marche pas.

DELETE FROM `users` WHERE `last_visit` < `2021-01-01 00:00:00`

par hikaru-59 » 25 avr. 2021, 12:47

Bonjour,
J'aimerais supprimer tous les utilisateurs non connectés depuis une date, mais ça ne marche pas :

Code : Tout sélectionner

DELETE FROM `users` WHERE `last_visit` < `2021-01-01 00:00:00`
Message d'erreur :
#1054 - Champ '2021-01-01 00:00:00' inconnu dans where clause