Vous n'êtes pas identifié(e).
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.
$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
Je me réponds à moi-même sur le 1er point. Mon script est maintenant :
$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
Salut,
$nbenrsup = $pdo->exec ("DELETE FROM connectes WHERE timestamp < $tacondition" );
a++
Hors ligne
Bonjour Pierrot,
Désolé mais je ne vois pas très bien l'amélioration que ça apporterait.
Hors ligne
bah, tu parles d'optimisation, je fais en une ligne ce que tu fais en plusieurs lignes
moi, je vois pas mal d'incohérences dans ton code
a++
Hors ligne
Bon, d'accord ça économise en effet 1 ligne ;-)
Peux-tu me dire ce qu'il y a comme incohérences, stp ?
Hors ligne
Salut,
Voilà ce que tu aurais du écrire :
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
a++
Pierre
Hors ligne
Tu as tout à fait raison, Pierrot, merci.
Hors ligne
Pas de quoi
a++
Hors ligne