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 :

Impossible de faire un insert sur une colonne datetime


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Points : 152
    Points
    152
    Par défaut Impossible de faire un insert sur une colonne datetime
    Bonsoir,

    Jusqu'à maintenant j'ai toujours stocké des dates dans une colonne timestamp, le problème c'est qu'à présent je suis obligé d'utiliser une colonne de type datetime.
    Dans cette colonne je souhaite mettre l'heure du moment présent.

    Voici la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $dateheure = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', time())))."'";
    	$idserveur = 21;
    	$req_webaccountBS = $pdo_webaccount->prepare('INSERT INTO GameTail_Event (PlayerID, IdIdx, ObjectIdx, Qty, ServerID, RegDate, id_article) VALUES(:PLAYERID, :IDIDX, :OBJECTIDX, :QTY, :SERVERID, :REGDATE, :IDARTICLE);');
    	$req_webaccountBS->bindParam(':PLAYERID', $identifiant, PDO::PARAM_STR, 20);
    	$req_webaccountBS->bindParam(':IDIDX', $resultat_idx[0][0], PDO::PARAM_STR, 6);
    	$req_webaccountBS->bindParam(':OBJECTIDX', $resultats_recherche_item2[0][1], PDO::PARAM_STR, 5);
    	$req_webaccountBS->bindParam(':QTY', $resultats_recherche_item2[0][3], PDO::PARAM_STR, 3);
    	$req_webaccountBS->bindParam(':SERVERID', $idserveur, PDO::PARAM_STR, 2);
    	$req_webaccountBS->bindParam(':REGDATE', $dateheure, PDO::PARAM_STR, 24);
    	$req_webaccountBS->bindParam(':IDARTICLE', $id_article, PDO::PARAM_STR, 3);
    	$req_webaccountBS->execute();
    } catch (PDOException $Exception) {}
    J'ai donc effectué quelques recherches et j'ai trouvé quelques "solutions" comme celle qui se trouve juste au-dessus de cette phrase. Le problème est que la colonne est toujours à 0000-00-00 00-00-00 qu'importe ce que j'essaye.

    J'ai également essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO GameTail_Event (PlayerID, IdIdx, ObjectIdx, Qty, ServerID, RegDate, id_article) VALUES(:PLAYERID, :IDIDX, :OBJECTIDX, :QTY, :SERVERID, NOW(), :IDARTICLE);
    Mais cela ne fonctionne pas.

    Je suis alors allé dans ma base de données et en ligne de commande j'ai écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO GameTail_Event (PlayerID, IdIdx, ObjectIdx, Qty, ServerID, RegDate, id_article) VALUES("test", 8125, 335, 1, 21, NOW(), 24);
    Et ici ça fonctionne.

    Est ce que quelqu'un sait comment mettre la date du moment présent dans cette colonne au moment de l’insertion des données ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux être plus précis que "ne fonctionne pas" ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Points : 152
    Points
    152
    Par défaut
    Bonsoir,

    Merci de vous intéresser à mon problème. Effectivement je n'ai pas été assez clair. Par "ça ne fonctionne pas" je voulais dire que la date n'est pas insérée. Le reste des valeurs sont insérées, donc la requête est exécutée, donc je n'ai (en théorie) pas d'erreur de syntaxe. A la place d'avoir par exemple 2015-05-14 20-03-50 j'ai 0000-00-00 00-00-00.

    Comme j'ai également dis, NOW() insère bien la date du moment si je le met dans la requête écrite en ligne de commande, par contre si je le met dans ma requête PDO j'ai 0000-00-00 00-00-00.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux nous montrer le code PHP ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Points : 152
    Points
    152
    Par défaut
    Pour le moment je n'ai rien de plus que celui inséré dans mon premier message.
    Afin d'écarter le moindre doute, je viens de modifier afin d'utiliser uniquement des variable que j'initialise moi même.

    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
    try
    {
    $identifiant = "test";
    $idx = 8125;
            $object = 45;
            $quantity= 1;
    	$idserveur = 21;
    $id_article = 24;
    	$req_webaccountBS = $pdo_webaccount->prepare('INSERT INTO GameTail_Event (PlayerID, IdIdx, ObjectIdx, Qty, ServerID, RegDate, id_article) VALUES(:PLAYERID, :IDIDX, :OBJECTIDX, :QTY, :SERVERID, now(), :IDARTICLE);');
    	$req_webaccountBS->bindParam(':PLAYERID', $identifiant, PDO::PARAM_STR, 20);
    	$req_webaccountBS->bindParam(':IDIDX', $idx, PDO::PARAM_STR, 6);
    	$req_webaccountBS->bindParam(':OBJECTIDX', $object , PDO::PARAM_STR, 5);
    	$req_webaccountBS->bindParam(':QTY', $quantity, PDO::PARAM_STR, 3);
    	$req_webaccountBS->bindParam(':SERVERID', $idserveur, PDO::PARAM_STR, 2);
    	$req_webaccountBS->bindParam(':IDARTICLE', $id_article, PDO::PARAM_STR, 3);
    	$req_webaccountBS->execute();
    } catch (PDOException $Exception) {}
    En regardant ma base de données je devrais donc avoir :

    "test" 8125 45 1 21 2015-05-14 20-49-05 24

    Le problème c'est que j'ai

    "test" 8125 45 1 21 0000-00-00 00-00-00 24

    Nom : lm.png
Affichages : 232
Taille : 3,8 Ko

    La première ligne c'est l’insertion via le code PhP, le second c'est l'insertion avec la ligne de commande directement dans la base de données.

    J'ai utilisé la même requête avec les mêmes données.

    Je ne comprend vraiment pas ...

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu utilises quel SGDB ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Points : 152
    Points
    152
    Par défaut
    J'utilise MySql et pour voir la base de données je prend SQLyog.

    En faite j'ai utilisé la méthode complexe, c'est à dire avec un trigger.

    Je me suis aidé du message de answered Feb 19 at 13:33 Lucas Moyano Angelinisur la page http://stackoverflow.com/questions/5...etime-datatype

    Maintenant je n'insère aucune donnée dans RegDate à l'aide de ma requête et ça se fait automatiquement.

    Ce qui me gêne un peu c'est pourquoi ça ne fonctionnait pas en utilisant NOW() dans la requête dans le code PHP mais que ça fonctionnait en ligne de commande ...
    Même si ça marche, j'aimerais comprendre au cas où un jour je veux plus utiliser le trigger ou alors s'il ne fonctionne plus, etc etc

    Le plus étrange c'est que je prend la requête dans le code php et je la colle dans sqlyog dans la partie réservée à la ligne de commande puis je remplace les :BLABLA par les valeurs et je laisse le NOW() et là bas ça fonctionne.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que tu pourrais fournir un dump de la structure de la table pour qu'on essaie de reproduire le problème ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Points : 152
    Points
    152
    Par défaut
    Bonsoir,

    Oui sans problème :
    http://www.cjoint.com/data3/3Era5Qpe3bj.htm

    De nombreuses colonnes ne servent à rien. Seuls PlayerID, IdIdx, ObjectIdx, Qty, ServerID, RegDate, id_article et nKey qui est en auto incrément sont vraiment utiles.

    J'ai déjà donné la requête dans mes messages donc je suppose que je n'ai pas besoin de tout réécrire.

    Si jamais vous n'avez aucune idée de la cause de ce problème ce n'est pas dramatique, le trigger a l'air de bien fonctionner mais bon si un jour je dois réutiliser un champ datetime et y mettre la date du moment j'aurais le même problème.

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ai fais le test avec ton code et ta table et j'ai bien la date du jour qui s'insère.

    C'est un peu ridicule d'utiliser un trigger pour remplir une valeur.
    Tu n'aurais pas déjà fait des tests avec des trigger sur cette colonne et tu aurais un trigger qui met la valeur à 0 ?

    si un jour je dois réutiliser un champ datetime et y mettre la date du moment j'aurais le même problème.
    Tu as essayé avec une autre table ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    À tout hasard, au cas où PDO interpréterait now() dans la requête, essaie avec CURRENT_TIMESTAMP.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  12. #12
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Points : 152
    Points
    152
    Par défaut
    Citation Envoyé par sabotage Voir le message
    J'ai fais le test avec ton code et ta table et j'ai bien la date du jour qui s'insère.

    C'est un peu ridicule d'utiliser un trigger pour remplir une valeur.
    Tu n'aurais pas déjà fait des tests avec des trigger sur cette colonne et tu aurais un trigger qui met la valeur à 0 ?


    Tu as essayé avec une autre table ?
    Bonsoir, désolé du temps de réponse.

    Non je n'avais pas de trigger donc non plus de trigger qui met la valeur à 0.

    "À tout hasard, au cas où PDO interpréterait now() dans la requête, essaie avec CURRENT_TIMESTAMP."

    Comment cela se rédige alors ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $req_webaccountBS = $pdo_webaccount->prepare('INSERT INTO GameTail_Event (PlayerID, IdIdx, ObjectIdx, Qty, ServerID, RegDate, id_article) VALUES(:PLAYERID, :IDIDX, :OBJECTIDX, :QTY, :SERVERID, :DATETIMEDUMOMENT, :IDARTICLE);');
    	$req_webaccountBS->bindParam(':PLAYERID', $identifiant, PDO::PARAM_STR, 20);
    	$req_webaccountBS->bindParam(':IDIDX', $idx, PDO::PARAM_STR, 6);
    	$req_webaccountBS->bindParam(':OBJECTIDX', $object , PDO::PARAM_STR, 5);
    	$req_webaccountBS->bindParam(':QTY', $quantity, PDO::PARAM_STR, 3);
    	$req_webaccountBS->bindParam(':SERVERID', $idserveur, PDO::PARAM_STR, 2);
    $req_webaccountBS->bindParam(':DATETIMEDUMOMENT', "CURRENT_TIMESTAMP", PDO::PARAM_STR, 25);
    	$req_webaccountBS->bindParam(':IDARTICLE', $id_article, PDO::PARAM_STR, 3);
    	$req_webaccountBS->execute();
    Comme ça ?

  13. #13
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Non tu remplaces seulement NOW() par CURRENT_TIMESTAMP.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [AC-2010] Faire pointer AutoExpand sur une colonne de son choix
    Par cwouam dans le forum IHM
    Réponses: 2
    Dernier message: 02/11/2011, 17h46
  2. [Dojo] Impossible de saisir une 2ième fois sur une colonne dans le composant grid edit
    Par samirsaid dans le forum Bibliothèques & Frameworks
    Réponses: 11
    Dernier message: 14/12/2009, 17h48
  3. Impossible de requeter sur une Colonne
    Par kfmystik dans le forum Requêtes
    Réponses: 11
    Dernier message: 01/08/2008, 14h14
  4. faire un lien sur une colonne
    Par astrolane dans le forum Excel
    Réponses: 3
    Dernier message: 21/05/2008, 14h20
  5. Réponses: 5
    Dernier message: 15/06/2007, 16h05

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