Das Alter einer Person anhand einer Spalte birthday (Format date) in MySQL berechnen
SELECT
TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age
FROM
users
Das Alter einer Person anhand einer Spalte birthday (Format date) in MySQL berechnen
SELECT
TIMESTAMPDIFF(YEAR, birthday, CURDATE()) AS age
FROM
users
Als erstes wird eine Tabelle für die Benutzer erstellt. Hier im Beispiel benutzen ich nur die 3 Spalten id, nick für den Benutzernamen und birthday für das Geburtsdatum.
CREATE TABLE accounts(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
nick VARCHAR(32) NOT NULL,
birthday DATE NULL,
UNIQUE(nick)
);
Um den Benutzernamen und das Alter aller Benutzer auf der Tabelle „accounts“ auszulesen wird dann folgender Query benutzt:
SELECT
nick,
YEAR(NOW()) - YEAR(birthday) - IF(DATE_FORMAT('%m-%d', NOW()) > DATE_FORMAT('%m-%d', birthday), 0, 1) AS age
FROM
accounts
Es wird dann folgendes (für meine Benutzer „foo“ und „bar“) Ausgegeben:
nick | birthday | age |
---|---|---|
foo | 1980-05-01 | 26 |
bar | 1984-04-04 | 22 |
Da es immer wieder Probleme mit SQL-Injections kommt, habe ich hier eine recht einfache Lösung, die ausreichend für die Absicherung von MySQL-Queries sein sollte.
function mysql_queryf() { $args = func_get_args(); $query = array_shift($args); $args = array_map('mysql_real_escape_string', $args); $query = vsprintf($query, $args); return mysql_query($query); }
Benutzt wird das ganze dann so. Es muss nur darauf geachtet werden, das sich im ersten Parameter, dem Query die entsprechenden Platzhalter benutzt werden.
mysql_queryf(" INSERT INTO guestbook(title, description, created) VALUES ('%s', '%s', NOW());", $title, $description );
Es werden die üblichen Platzhalter von sprintf wie %s für String, %d für einen signed Integer, %u für einen unsigned Integer oder %F (nicht %f) für einen Float benutzt. Der Vorteil ist, dass die Platzhalter einen Query evtl etwas übersichtlicher machen, da sich nicht mehr soviele Anführungszeichen und PHP-Funktionen zum sichern der Variablen im Query befinden und zusätzlich wird jede Variable automatisch für die Datenbank escaped.
Die Funktionen addslashes(), str_replace(), preg_replace() usw. sind nicht zum Absichern von Queries geeignet.