2017-05-21 7 views
-1

Hallo Ich habe ein Problem mit der letzten Benutzer Login-Zeit in meiner Datenbank zu aktualisieren, wenn ich es auf eine andere Spalte aktualisieren funktioniert es perfekt, aber es funktioniert einfach nicht, wenn ich Versuchen Sie, die spezifische Spalte "lastlogin" zu aktualisieren.datetime Feld wird nicht in MySQL Datenbank aktualisiert

Mein Code:

@mysql_query("UPDATE my_users SET lastlogin=NOW() WHERE id=".$_SESSION["id"]); 

My DB column: 

column name: lastlogin 

type: datetime 

Null: No 

Default: 0000-00-00 00:00:00 

falsch Alles, was mit der Art und Weise ist die Spalte Setup in der DB? Wie ich oben erwähnt habe, wenn ich es NOW() in einer anderen Spalte sagen soll, funktioniert es gut.

+3

Ich empfehle Ihnen, das '@' at-Zeichen vor 'mysql_query' zu entfernen. Wenn es einen Fehler gibt, denke ich, dass wir es wissen wollen. Eine weitere Empfehlung: Weisen Sie die dynamisch generierte SQL-Anweisung einer Variablen in einem separaten Schritt zu und echo oder vardump die Variable für debuggin, bevor Sie mysql_query aufrufen. Wir könnten diese SQL-Anweisung zum Testen zu einem anderen Client nehmen. Und was ist der Datentyp der Spalte 'id'? Ist der Wert von $ SESSION ["id"] integer? mysql_-Schnittstellenfunktionen sind veraltet und haben PHP 7 entfernt. Verwenden Sie PDO oder mysqli und vorbereitete Anweisungen mit Bind-Platzhaltern. – spencer7593

+0

@ spencer7593 danke für den Rat. Ich weiß, dass die Abfrage funktioniert, denn wenn ich "lastlogin" in ein anderes Datenbankfeld ändere, fügt es die Daten in die Datenbank ein. Das Problem ist, wenn Sie versuchen, in die Spalte "lastlogin" einzufügen. –

+0

schließen Sie einige Möglichkeiten aus ... Es gibt keinen 'BEFORE UPDATE'-Trigger, der in der Tabelle definiert ist, der' lastlogin' einen Wert zuweist, es gibt kein 'AFTER UPDATE', das einen Fehler verursacht und die Transaktion rückgängig macht. Ich schlage vor, dass Sie versuchen, * zwei * Spalten zu aktualisieren, JETZT() sowohl auf "logindate" als auch auf eine andere Tabellenspalte zuzuweisen. Und sehen Sie, ob das Update der anderen Spalte erfolgreich ist. – spencer7593

Antwort

0

Verwenden Sie mysql_error zu versuchen und zu finden, was falsch ist, dann posten Sie das hier, damit wir Ihnen helfen können, wenn Sie es brauchen. (Würde kommentieren aber zu niedrigen rep)

0

Aus meiner Erfahrung in der Vergangenheit, mysql_query() ersetzt nicht unbedingt Variablen vor der Ausführung von SQL. Versuchen Sie, in diesem Format zu schreiben. Verwenden Sie auch mysql_error zu überprüfen, ob es irgendwelche Probleme mit Ihrem Code-Ausführung sind:

$sql = "UPDATE my_users SET lastlogin=NOW() WHERE id=".$_SESSION["id"]; 
mysql_query($sql) or die(mysql_error()); 

Wenn kein Fehler vorhanden ist, dann gibt es nur wenige Möglichkeiten, warum die laslogin Eintrag geschieht nicht:

  • $ _SESSION ["id"] enthält keinen Wert und es wird kein Wert an mysql übergeben.
  • Es gibt keine ID, die mit $ _SESSION ["id"] übereinstimmt.

Debug:

  • versuchen auch einige andere Spalten zu aktualisieren.
  • Sie auch überprüfen möchten, ob Sie richtig Erweiterungen wie PDO verwenden ..

auch gefunden, dass frühere Version von MySQL nicht mit Datetime-Spalte zu aktualisieren jetzt (nicht unterstützt). Versuchen Sie in diesem Fall, den Spaltentyp auf TIMESTAMP zurückzusetzen. Beziehen Sie sich für Details: https://bugs.mysql.com/bug.php?id=27645

+0

Hallo, wie ich bereits erwähnt habe, funktioniert der PHP-Code gut, ich kann ihm sagen, dass er ohne Probleme in eine andere Spalte in der Datenbank schreibt. –

+0

Seltsam. Versuchen Sie, den Spaltentyp auf TIMESTAMP zurückzusetzen. Über diese https://bugs.mysql.com/bug.php?id=27645 –

0

Gelöst. Es gab eine weitere ähnliche Aussage weiter unten, die über das Reiten dieses war! Wie dumm von mir, aber leicht zu verpassen!

Verwandte Themen