Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme mit CURRENT_TIMESTAMP

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme mit CURRENT_TIMESTAMP

    Hallo zusammen,

    ich habe eine User Datenbank, in der sich eine Spalte Names "cDate" befindet.
    Diese hat als default Value "CURRENT_TIMESTAMP"
    Code:
    cDate timestamp default CURRENT_TIMESTAMP not null
    Ich befülle die Datenbank ganz normal mit einem INSERT, in dem ich die cDate Spalte rauslasse.

    Bei jedem meiner Tests hat das funktioniert. Anschließend haben sich andere Beta Tester auf der Seite registriert und jetzt steht als Value in diesem Feld:
    0000-00-00 00:00:00
    Anschließend habe ich noch 2 mal getestet und ich hatte immer die korrekte Zeit. Unter welchen Bedingungen kann es passieren, dass die aktuelle Zeit nicht genommen werden kann? Ist dies nicht so stabil, wie ich vermutet hatte und muss wirklich NOW() mit angeben?

    Hat schon mal jemand ähnliches beobachtet?

    Danke und Gruß
    GoatMachine

  • #2

    Ich gehe mal von Mysql aus, da du das nicht angegeben hast.:
    Bitte mal im Handbuch nachlesen, da gibt es viele Ausnahmen und ich weiss nicht was davon auf dich zutrifft..

    Kommentar


    • #3
      Hallo protestix,

      ja es handelt sich um MySQL und zwar in der Version: 5.6.33

      Aber wie kann es sein, dass mal funktioniert und dann mal wieder nicht, ohne dass ich eine Änderung am SQL Befehl gemacht habe?

      Kommentar


      • #4
        Zeige deinen Code, wie sollen wir das sonst wissen.

        Kommentar


        • #5
          Naja, ich habe ja keinen Code, in dem dieses Feld geschrieben wird. Ich kann dir da nur die 2 SQL Befehle zu zeigen:
          PHP-Code:
            create table user (  ID int not null   primary key,  user varchar(50not null,  mail varchar(100not null,  salt char(128null,  password char(128null,  isDeleted tinyint(1) default '0' null,  cDate timestamp default CURRENT_TIMESTAMP not null,  constraint user   unique (user) ) ; 
          PHP-Code:
            INSERT INTO user(IDusermailsaltpasswordVALUES((SELECT MAX(u.ID) + 1 uID FROM user u), ?, ?, ?, ?) 
          Sonst wird das Feld nur mit SELECT ausgegeben.
          Das ist das Resultat aus der Datenbank. Verändert an den SQL Befehlen habe ich nichts.

          Kommentar


          • #6
            Zitat von GoatMachine Beitrag anzeigen
            . Anschließend haben sich andere Beta Tester auf der Seite registriert und jetzt steht als Value in diesem Feld:
            Das heisst also du hast mindestens 1 Formular und 1 PHP Script, das die Daten entgegen nimmt und einträgt und diesen Code solltest du mal zeigen.

            Kommentar


            • #7
              Hier werden die Daten entgegen genommen:
              PHP-Code:
                $username $_POST['username'];
              $password $_POST['password'];
              $password_wdh $_POST['password_wdh'];
              $email $_POST['email'];
              if(
              $password === $password_wdh) {    
              $parameters = array('username' => $username'password' => md5($password), 'email' => $email);    
              $return_array $controller_registration->doRegistration($parameters);
              } else {    
              $return_array = array('success' => false'error' => "Die Passwörter stimmen nicht überein");

              Die doRegistration()
              PHP-Code:
              $salt $this->login->createSalt();
              $password $this->login->toEncode($parameters['password'], $salt);
              $user = new model_user(-1$parameters['username'],     $parameters['email'], nullnullnullnullnullnull,nullnull,     nullnullnull$password$salt);
              $user $this->repository_user->addRecord($user);    
              if (
              $user !== null) {  
               return array(     
              'success' => false,     'error' => 'Leider ist der Benutzername bereits vorhanden' );  
              }    else {    
              return array(         
              'success' => false,         'error' => 'Leider ist ein Fehler bei der Registrierung aufgetreten. Versuche es bitte später noch einmal'     );

              Und die addRecord()
              PHP-Code:
              $existUser $this->findOneByUserName($user->getUsername());
              if(
              is_null($existUser)) {    
              $sql 'INSERT INTO user(ID, user, mail, salt, password) VALUES((SELECT MAX(u.ID) + 1 uID FROM user u), ?, ?, ?, ?)';    
              $username $user->getUsername();    
              $mail $user->getEmail();    
              $salt $user->getSalt();    
              $password $user->getPassword();      
              $insert $this->database->prepare($sql);    
              $insert->bind_param('ssss'$username$mail$salt$password);    
              $insert->execute();    
              $insert->close();      
              $registUser $this->findOneByUserName($user->getUsername());    
              return 
              $registUser;
              } else {    
              $existUser->setUserid(-1); //Code für Benutzername bereits vorhanden    
              return $existUser;

              Mehr Code existiert nicht, außer Weiterleitungen und Boxen die im Fehler angezeigt werden...

              Kommentar


              • #8
                Code:
                $sql = 'INSERT INTO user(ID, user, mail, salt, password) VALUES((SELECT MAX(u.ID) + 1 uID FROM user u)...
                


                was soll ID sein, ein SERIAL oder wie auch immer das bei MySQL sich nennt? Mach Dich schlau, wie man sowas nutzt. So jedenfalls nicht.
                PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                Kommentar


                • #9
                  Zitat von akretschmer Beitrag anzeigen
                  [code]
                  was soll ID sein, ein SERIAL oder wie auch immer das bei MySQL sich nennt? Mach Dich schlau, wie man sowas nutzt. So jedenfalls nicht.
                  Der Primary Key und ein INT? Wie soll man das denn sonst verwenden?

                  Kommentar


                  • #10
                    Zitat von GoatMachine Beitrag anzeigen

                    Der Primary Key und ein INT? Wie soll man das denn sonst verwenden?
                    id's solltest du auf auto increment setzen, dann kümmert sich die Datenbank um die Einzigartigkeit.

                    Kommentar


                    • #11
                      Mir wurde mal gesagt, dass das die Performance runterzieht. Deshalb habe ich das so gelöst.
                      Aber der PK ist ja auch nicht das Problem hier

                      Kommentar


                      • #12
                        Mir wurde mal gesagt, dass das die Performance runterzieht. Deshalb habe ich das so gelöst.
                        Das scheint mir quatsch zu sein und deine Lösung ist sicher nicht schneller.

                        md5($password)
                        md5 ist unwesentlich sicherer, als garnicht hashen. Php stellt dafür password_hash und password_verify direkt zur Verfügung.

                        Kannst du uns dein Problem denn in einer nachstellbaren Form zeigen?
                        Hier mal deine Tabelledefinition aufs wesentliche beschränkt funktionierts problemlos: http://sqlfiddle.com/#!9/9caf11/1

                        Kommentar


                        • #13
                          MD5 ist nur einer von mehreren Schritten mit dem Passwort.

                          Es ist wie in Post 5. Es ging die ganze Zeit. Auf einmal bei 2 Usern nicht und jetzt geht es wieder. Hatte vorhin 39 User registriert und überall war das Datum da.
                          Bei den beiden wo es nicht ging, gibt es auch keine Gemeinsamkeiten. Unterschiedliche Zeit, Browser, PC, und Ort.

                          Kommentar

                          Lädt...
                          X