PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 16-09-2017 15:09:04

tintin56
Membre
Inscription : 16-09-2017
Messages : 7

Suppression de lignes dans une table avec pdo

Bonjour,

Je souhaite supprimer de la table 'connectes' toutes les lignes pour lesquelles le timestamp enregistré a + de 5'. Pour cela, j'utilise le code suivant.

 <?php
                include "connexion.php";
                $timestamp_5min = time() - 300;

                $SQL = 'DELETE FROM connectes WHERE timestamp < :ts';
                try
                    {
                        $stmt = $pdo->prepare($SQL);
                        $stmt->bindValue( ':ts', $timestamp_5min);
                        if (!$stmt->execute())
                            {
                                throw new PDOException('Erreur Execute requete');
                            }
                    }
                catch (PDOException $pdoE)
                    {
                        echo "Une erreur s'est produite dans le nettoyage des ip: <br/>".$pdoE->getMessage();
                    }
?>

Pouvez-vous me dire comment faire pour afficher le nombre de lignes supprimées et si c'est correctement écrit.
D'avance merci.

Dernière modification par tintin56 (16-09-2017 15:51:47)


Hors ligne

#2 16-09-2017 15:53:43

tintin56
Membre
Inscription : 16-09-2017
Messages : 7

Re : Suppression de lignes dans une table avec pdo

Je me réponds à moi-même sur le 1er point. Mon script est maintenant :

 <?php
                include "connexion.php";
                $timestamp_5min = time() - 300;

                $SQL = 'DELETE FROM connectes WHERE timestamp < :ts';
                try
                    {
                        $stmt = $pdo->prepare($SQL);
                        $stmt->bindValue( ':ts', $timestamp_5min);
                        if (!$stmt->execute())
                            {
                                throw new PDOException('Erreur Execute requete');
                            }
                        else
                        {
                            echo "Il y a ". $stmt->rowCount() ." lignes supprimées";
                        }
                    }
                catch (PDOException $pdoE)
                    {
                        echo "Une erreur s'est produite dans le nettoyage des ip: <br/>".$pdoE->getMessage();

                    }
?>

Pouvez-vous dire comment le pourrais le rendre + propre car je ne suis pas sûr de moi.

Hors ligne

#3 17-09-2017 22:47:22

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 180

Re : Suppression de lignes dans une table avec pdo

Salut,

      $nbenrsup = $pdo->exec ("DELETE FROM connectes WHERE timestamp < $tacondition" );

 

a++

Hors ligne

#4 27-09-2017 09:07:37

tintin56
Membre
Inscription : 16-09-2017
Messages : 7

Re : Suppression de lignes dans une table avec pdo

Bonjour Pierrot,

Désolé mais je ne vois pas très bien l'amélioration que ça apporterait.

Hors ligne

#5 28-09-2017 12:53:16

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 180

Re : Suppression de lignes dans une table avec pdo

bah, tu parles d'optimisation, je fais en une ligne ce que tu fais en plusieurs lignes wink
moi, je vois pas mal d'incohérences dans ton code wink

a++

Hors ligne

#6 29-09-2017 14:17:22

tintin56
Membre
Inscription : 16-09-2017
Messages : 7

Re : Suppression de lignes dans une table avec pdo

Bon, d'accord ça économise en effet 1 ligne ;-)
Peux-tu me dire ce qu'il y a comme incohérences, stp ?

Hors ligne

#7 29-09-2017 16:38:33

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 180

Re : Suppression de lignes dans une table avec pdo

Salut,
Voilà ce que tu aurais du écrire :


       $timestamp_5min = time() - 300;
       try{
         $nbenrsup = $pdo->exec ("DELETE FROM connectes WHERE timestamp <  $timestamp_5min" );
         echo "il y a $nbenrsup supprimé(s) dans la table";
      catch(PDOException $e){
          echo "Une erreur s'est produite dans le nettoyage des ip: <br/>".$pdoE->getMessage();
      }
 

commande exec de pdo :
PDO::exec — Exécute une requête SQL et retourne le nombre de lignes affectées


Maintenant, le code que tu a écris :

               $timestamp_5min = time() - 300;
                $SQL = 'DELETE FROM connectes WHERE timestamp < :ts';
                try
                    {
                        $stmt = $pdo->prepare($SQL);
                        $stmt->bindValue( ':ts', $timestamp_5min);
                        if (!$stmt->execute())
                            {
                                throw new PDOException('Erreur Execute requete');
                            }
                        else
                        {
                            echo "Il y a ". $stmt->rowCount() ." lignes supprimées";
                        }
                    }
                catch (PDOException $pdoE)
                    {
                        echo "Une erreur s'est produite dans le nettoyage des ip: <br/>".$pdoE->getMessage();
                    }
 

1) quel intérêt de préparer, de binder une requète qui ne risque pas d'injection puisque c'est toi qui crée le paramètre ( $timestamp_5min) ?????
2) puisque que tu fonctionnes dans un try catch je présume que tu as lancé cette commande : $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    Dans ce cas, le code qui suis le if (!$stmt->execute()){} ne s’exécutera jamais si une erreur survient, c'est le code qui est dans la catch qui s’exécutera pas le code dans le if ni celui dans le
    else.

j'arrête là parce que il y à encore plein de choses à dire wink

a++

Pierre

Hors ligne

#8 30-09-2017 10:01:06

tintin56
Membre
Inscription : 16-09-2017
Messages : 7

Re : Suppression de lignes dans une table avec pdo

Tu as tout à fait raison, Pierrot, merci.

Hors ligne

#9 30-09-2017 10:46:30

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 180

Re : Suppression de lignes dans une table avec pdo

Pas de quoi winkcool

a++

Hors ligne

Pied de page des forums