executer un script sql vias taches planifiées de windows

Petit nouveau ! | 5 Messages

09 mai 2011, 09:30

bonjour

je suis debutante en php et j'ai besoin d'aide pour ma table temporaire (j'ai un script que je voudrais executer toutes les heures )

mon script
SET @pstart = CAST( DATE_FORMAT( DATE_SUB( now(), INTERVAL 1 HOUR ), '%Y-%m-%d %H:00:00' ) AS DATETIME );
SET @pend = DATE_ADD( @pstart, INTERVAL 1 HOUR );

CREATE TEMPORARY TABLE t(
  user_id  INTEGER NOT NULL,
  clic_dt  DATETIME NOT NULL,
  clic_count INTEGER NOT NULL
);

BEGIN;

INSERT INTO t SELECT user_id, min( clic_dt ), sum( clic_count ) 
FROM clics
WHERE clic_dt >= @pstart AND clic_dt < @pend
GROUP BY user_id, DATE_FORMAT( clic_dt, '%Y-%m-%d %H:00:00' )
FOR UPDATE;

DELETE FROM clics WHERE clic_dt >= @pstart AND clic_dt < @pend;

INSERT INTO clics SELECT * FROM t;

COMMIT;

DROP TABLE t;
directement dans phpmyadmin pas de soucis ca fonctionne tres bien mais je voudrais pourvoir l'executer depuis mon ordi vias les taches planifiées (si c'est possible)

mais dans ma page php que dois-je noter pour faire executer le script
j'ai essayer avec ceci
<?php
 connectuniversdegribou();
SET @pstart = CAST( DATE_FORMAT( DATE_SUB( now(), INTERVAL 1 HOUR ), '%Y-%m-%d %H:00:00' ) AS DATETIME );
SET @pend = DATE_ADD( @pstart, INTERVAL 1 HOUR );

CREATE TEMPORARY TABLE t(
  user_id  INTEGER NOT NULL,bla bla bla
mais fonctionne pas je sais je sais je ne suis pas une lumiere mais a 54ans on ne comprends pas aussi vite qu'a 20ans lol
etje remercie toutes les personnes qui accepterons de m'aider

ViPHP
xTG
ViPHP | 7331 Messages

09 mai 2011, 13:08

On ne peut pas balancer du script SQL directement dans une page PHP.
Il faut se connecter à la base de données, puis lui soumettre la/les requêtes (cf : http://www.phpfrance.com/tutoriaux/inde ... l-avec-php)

ViPHP
ViPHP | 2577 Messages

09 mai 2011, 14:55

Bonjour,

Sans garantie, je pense qu'il faut que tu crées une procédure stockée (http://dev.mysql.com/doc/refman/5.0/fr/ ... yntax.html).
Ensuite, tu fais un script PHP qui effectue la connexion à la base de données et appel la procédure stockée via mysql_query()
$cnx = mysql_connect('serveur','user','mot de passe') or die(mysql_error()); 
mysql_select_db('base de données',$cnx) or die(mysql_error()); 
mysql_query('call MaProcedure()') or die(mysql_error()); 
Une autre solution est de réécrire le tout en PHP en gérant les variables dans PHP et en fasant une suite de mysql_query().

Petit nouveau ! | 5 Messages

16 mai 2011, 21:16

bonjour

je n'ai pas pu repondre de suite mais petite panne d'ordi :P

donc je suis allée voir pour la procedure stockée

Code : Tout sélectionner

CREATE PROCEDURE sp_name ([parameter[,...]])[u]ici je dois mettre quoi [/u] [characteristic ...] routine_body CREATE FUNCTION sp_name ([parameter[,...]])[u]et ici creer une fonction ??[/u] [RETURNS type] [characteristic ...] routine_body paramètre : [ IN | OUT | INOUT ] param_name type type : Any valid MySQL data type characteristic: LANGUAGE SQL | [NOT] DETERMINISTIC | SQL SECURITY {DEFINER | INVOKER} | COMMENT string routine_body : Commande(s) SQL valide(s)
je ne comprends pas comment le renseigner (par quoi ??qu'est -ce qu'il entende par parametre??)
:cry: :cry:

ViPHP
xTG
ViPHP | 7331 Messages

17 mai 2011, 08:23

Bah un paramètre... Une procédure c'est une fonction, donc tu peux lui passer des paramètres.
Mais ce n'est pas une obligation, de là viennent les [].

Petit nouveau ! | 5 Messages

17 mai 2011, 17:23

je suis desolée mais là je vais craquée

je comprends rien j'arrive a rien toujours des erreurs svp aidez moi car sinon tant pis je ferme mon forum car depuis des mois que j'essaie d'avoir quelques choses de bien mais etant debutante je rame comme c'est pas permis et là je craque
il me reste deux choses a faire mais ce sont les plus compliqueés pour moi et toujours aucun resultat

1) procedure stockee pour executer mon script sql toutes les heures depuis les taches planifiées de windows

pour la creation de la procedure d'abord je la place ou ? dans une page php? ou directement dans phpmyadmin?? :?:

j'ai bien essayer en faisant
DELIMITER |
CREATE PROCEDURE ma_proc ()
   characteristic:
    LANGUAGE SQL
    SET @pstart = CAST( DATE_FORMAT( DATE_SUB( now(), INTERVAL 1 HOUR ), '%Y-%m-%d %H:00:00' ) AS DATETIME );
SET @pend = DATE_ADD( @pstart, INTERVAL 1 HOUR );

CREATE TEMPORARY TABLE t(
  user_id  INTEGER NOT NULL,
  clic_dt  DATETIME NOT NULL,
  clic_count INTEGER NOT NULL
);

  BEGIN;

INSERT INTO t SELECT user_id, min( clic_dt ), sum( clic_count ) 
FROM clics
WHERE clic_dt >= @pstart AND clic_dt < @pend
GROUP BY user_id, DATE_FORMAT( clic_dt, '%Y-%m-%d %H:00:00' )
FOR UPDATE;

DELETE FROM clics WHERE clic_dt >= @pstart AND clic_dt < @pend;

INSERT INTO clics SELECT * FROM t;

COMMIT;

DROP TABLE t;
END|
DELIMITER;
 
mais des erreurs ????? tout la procedure s'affiche  sur ma page ???
comment dois-je faire pour que ca fonctionne ???????svp

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

17 mai 2011, 18:30

salut,

oui il faut "dire" à mysql que la procédure existe, donc avec phpmyadmin en utilisant la fenêtre "SQL" tu colle tout dedans et tu valide.

Si tout va bien il va te dire ok et après avec php tu peu appeler la procédure stockée.
ainsi
<?php
mysql_connect ('nom du serveur', 'utilisateur','mot de passe');
mysql_select_db('nom de l abase de donnée');
@mysql_query('call ma_proc()');
mysql_close();
?>
ça c'est le code minimal mais il pourrait être intéressant de générer un fichier log de tous cela pour "voir" ce qu'il se passe et intervenir en cas de soucis.
par exemple
<?php
$logFile = 'procStock.log';
define ('NL'."\n");//permet de le saut de ligne
$link = @mysql_connect ('nom du serveur', 'utilisateur','mot de passe');
if ($link === false){
    ob_start();
    mysql_error();
    $t = ob_get_contents();
    ob_end_clean();
    file_put_contents($logFile, $t);
}
else {
    $r = mysql_select_db('nom de l abase de donnée',$link);
    if ($r === false){
        ob_start();
        echo '--------------------------------------------------'.NL.
        date('d/m/H h:i:s').'impossible de selectionner la base : '.NL;
        mysql_error();
        $t = ob_get_contents();
        ob_end_clean();
        file_put_contents($logFile, $t);
    }
    else {
        $ret = mysql_query('call ma_proc()');
        if ($ret === false){
            ob_start();
            echo '--------------------------------------------------'.NL.
            date('d/m/H h:i:s').'impossible de selectionner la base : '.NL;
            mysql_error();
            $t = ob_get_contents();
            ob_end_clean();
            file_put_contents($logFile, $t);
        }
        else {
            $f = '--------------------------------------------------'.NL.
            date('d/m/H h:i:s').' - Utilisation de la procédure stokée ok'.NL;
            file_put_contents($logFile, $f);
        }
        mysql_close();
    }
}
?>
après pour l'utilisation avec les tables planifier, il faut indiquer d'utiliser php et le nom du fichier en paramètre par exemple : php.exe clean.php
je ne sais plus comment fonctionne les taches planifiée (si l'on peut utiliser un paramètre) au pire il suffit de créer un fichier .bat avec la commande dedans (attention si le répertoire d'installation de php n'est pas dans le path il faut indique le chemin complet devant php.exe ;) )

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 5 Messages

17 mai 2011, 20:03

:? :?

hier j'avais fais un essai et maintenant ca me dit que la procedure existe dejà
seulement j'avais juste mis ceci dans ma procedure est-ce que ca fonctionnera quand meme???
CREATE PROCEDURE ma_proc ()
   
    SET @pstart = CAST( DATE_FORMAT( DATE_SUB( now(), INTERVAL 1 HOUR ), '%Y-%m-%d %H:00:00' ) AS DATETIME );
SET @pend = DATE_ADD( @pstart, INTERVAL 1 HOUR );

CREATE TEMPORARY TABLE t(
  user_id  INTEGER NOT NULL,
  clic_dt  DATETIME NOT NULL,
  clic_count INTEGER NOT NULL
);

  BEGIN;

INSERT INTO t SELECT user_id, min( clic_dt ), sum( clic_count )
FROM clics
WHERE clic_dt >= @pstart AND clic_dt < @pend
GROUP BY user_id, DATE_FORMAT( clic_dt, '%Y-%m-%d %H:00:00' )
FOR UPDATE;

DELETE FROM clics WHERE clic_dt >= @pstart AND clic_dt < @pend;

INSERT INTO clics SELECT * FROM t;

COMMIT;

DROP TABLE t;
près pour l'utilisation avec les tables planifier, il faut indiquer d'utiliser php et le nom du fichier en paramètre par exemple : php.exe clean.php
je ne sais plus comment fonctionne les taches planifiée (si l'on peut utiliser un paramètre) au pire il suffit de créer un fichier .bat avec la commande dedans (attention si le répertoire d'installation de php n'est pas dans le path il faut indique le chemin complet devant php.exe ;) )
je ne sais meme pas de quoi tu parles alors !!!!!!!!

ensuite j'ai tester le
il pourrait être intéressant de générer un fichier log de tous cela pour "voir" ce qu'il se passe et intervenir en cas de soucis.
par exemple
mais j'ai ca comme erreur

Warning: Wrong parameter count for define() in /web/universdegribou/www/test_t.php on line 3

Fatal error: Call to undefined function: file_put_contents() in /web/universdegribou/www/test_t.php on line 37

ViPHP
xTG
ViPHP | 7331 Messages

18 mai 2011, 08:22

Fatal error: Call to undefined function: file_put_contents() in /web/universdegribou/www/test_t.php on line 37
Ton serveur n'est pas en PHP5 si cette fonction n'est pas disponible.

Petit nouveau ! | 5 Messages

18 mai 2011, 08:34

-- Généré le : Mar 17 Mai 2011 à 17:49
-- Version du serveur: 5.0.67
-- Version de PHP: 5.2.0-8+etch16
je pense que si version php
Ton serveur n'est pas en PHP5 si cette fonction n'est pas disponible.
bon ma decision est prise je change d'hebergeur les mutualises sont bien mais ....je pense a http://www.wintowin.fr/hebergement_asp_php.asp vous connaissez