IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Utiliser une fonction PHP dans une requête SQL [PostgreSQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 41
    Points : 26
    Points
    26
    Par défaut Utiliser une fonction PHP dans une requête SQL
    Bonjour, comme indiqué, je souhaite utiliser une fonction PHP dans une requête SQL :

    J'ai une base de donnée PSQL qui contient une table ip avec notamment un champ "modif" de type text.

    J'ai une fonction get_age($string) qui va prendre en paramètre une chaîne de caractères formatée comme "modif", la parser, récupérer la date d'ajout contenu dans cette chaîne et retourner TRUE si cette date est inférieure à un certain âge.

    Ci-dessous la fonction get_age() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
    function	get_age($modif)
    {
    	$days_limit = 10;
    	$modif = strstr($modif, "Adresse IP ajoutée le ");
    	if ($modif)
    	{
    		$str_date = substr($modif, 22, 11);
    		$date = new DateTime($str_date);
    		$now = new DateTime();
    		// echo "Date de création de l'IP : ".$date->format('d/m/Y')."<br />";
    		// echo "Date actuelle : ".$now->format('d/m/Y')."<br />";
    		$interval = $date->diff($now);
    		$interval->format('%d');
    		if ($interval->m == 0 AND $interval->y == 0)
    			if ($interval->d < $days_limit)
    				return TRUE;
    	}
    	return FALSE;
    }
    ?>
    Or à un moment dans mon code, j'effectue une requête pour mettre à jour ma base de données et j'aimerai utiliser cette fonction dans une requête.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $request = "UPDATE ip SET actif = '0'";
    En gros j'aimerai pouvoir faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $request = "UPDATE ip SET actif = '0' WHERE get_age(modif)";
    (modif est un champ de la table ip au même titre que actif)

    Existe-il une solution simple pour effectuer cette requête ?


    Cordialement.

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Tu pourrais faire une première requête SQL qui te retourne tous les id + modif, et qui les passe à la moulinette de ta fonction PHP pour alimenter un tableau PHP.

    Ensuite, à partir de ce tableau PHP, organiser ton update en SQL.

    Sinon, tu peux aussi transcrire ta fonction PHP en SQL, car si tu maîtrises SQL, pas besoin de PHP ici.
    J'ai fait ça au débotté... A tester et corriger :
    Bien entendu, pour tester sur ton Phpmyadmin, prends bien soin de tester le select tout seul, puis s'il marche impec, de lancer ton update avec le select comme sous requete.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    update ip
    set actif=0
    where id in (
    	select ip2.id
    	from ip as ip2
    	where locate(ip2.modif,'Adresse IP ajoutée le ') <> FALSE
    	and  (EXTRACT(YEAR_MONTH FROM (substr(ip2.modif,23,11)))=EXTRACT(YEAR_MONTH FROM CURDATE()) AND (((EXTRACT(DAY FROM CURDATE()) - (EXTRACT(DAY FROM (substr(ip2.modif,23,11))))) <= 10)))
    )
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Merci pour ces solutions Dendrite.

    J'ai choisi de faire une requête SQL plutôt que de créer un tableau PHP.

    Cependant, en PSQL, pas de fonctions locate() ou extract() ou encore curdate().
    La requête devient alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $request = "UPDATE ip SET actif = '0'";
    pg_query($db, $request);
    $request2 = "UPDATE ip SET actif = '1' WHERE age(now(), to_date(substr(modif, 23, 10), 'DD-MM-YYYY')) < '10 days' AND modif LIKE 'Adresse IP ajoutée le %'";
    pg_query($db, $request2);
    Et ça a l'air de fonctionner pour le moment.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. appeler une fonction php dans une fonction javaScript
    Par geeksDeve dans le forum Langage
    Réponses: 3
    Dernier message: 17/04/2012, 16h30
  2. Réponses: 10
    Dernier message: 14/03/2009, 14h36
  3. Réponses: 1
    Dernier message: 25/10/2007, 22h25
  4. [PHP-JS] une variable php dans une fonction javascript
    Par megapacman dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/06/2006, 15h08
  5. [PHP-JS] une variable php dans une fonction javascript
    Par megapacman dans le forum Langage
    Réponses: 3
    Dernier message: 12/06/2006, 15h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo