Kategorien
MySQL PHP

Strings speichern in MySQL und Sicherheit

Um einen String abzuspeichern mit unbekanntem Inhalt, sollte immer die PHP Funktion mysql_real_escape_string verwendet werden:

$mystring = mysql_real_escape_string($mystring );

Damit werden bösartige Strings entschärft, mit denen großer Schaden angerichtet werden kann wie:

$string = "1';DELETE FROM table WHERE 1;#";
$sql = "SELECT * FROM table WHERE id = '$string' ";

Dies kann durch die Verwendung der Funktion verhindert werden.

 

 

Kategorien
MySQL

MySQL SELECT Daten, die nicht älter als x Tage/Stunden/Minuten sind

Wenn man eine Spalte vom Typ timestamp hat und nur Daten eines bestimmten Alters selektieren will,  kann man dies in MySQL tun mit der DATE_SUB Funktion:

SELECT * FROM ... WHERE  timestamp > TIMESTAMP(DATE_SUB(NOW(), INTERVAL 2 hour))

Damit werden nur Daten selektiert, die nicht älter als eine Stunde sind. Das gleiche funktioniert bspw. auch mit Tagen:

SELECT * FROM ... WHERE  timestamp > TIMESTAMP(DATE_SUB(NOW(), INTERVAL 2 day))

und  Minuten:

.SELECT * FROM ... WHERE  timestamp > TIMESTAMP(DATE_SUB(NOW(), INTERVAL 10 minute))

Eine andere Möglichkeit wäre, PHP dafür zu benutzen, aber aus Performance Gründen sollte man immer MySQL vorziehen.

Kategorien
MySQL

MySQL Duplicate entry ‚1‘ for key ‚PRIMARY‘

Wenn man eine Fehlermeldung bekommt wie

Duplicate entry '1' for key 'PRIMARY'

Dann sollte man den Eintrag entweder mit UPDATE (beste Variante)

INSERT INTO table (a,b,c) VALUES (1,2,3)
  ON DUPLICATE KEY UPDATE c=c+1;

oder einfach nichts verändern in der Datenbank entweder mit

INSERT IGNORE INTO table (a,b,c) VALUES (1,2,3)

Wobei hier auch mögliche Fehlermedlungen unterdrückt werden. Achtung!

Kategorien
MySQL

MySQL speichert immer 2147483647 ab

Die Lösung ist ganz einfach, die 2147483647 ist der maximale Wert einer int-Variablen in MySQL (231 − 1). Wenn versucht wird in eine int-Spalte einen größeren Wert zu schreiben, so speichert MySQL immer dieses Wert ab, anstelle des gewünschten, größeren Wertes. Dann sollte man den Datentyp bigint nehmen, der Zahlen bis 9223372036854775807  zulässt (signed) oder auf unsigned (nur positive Werte, reicht bis 4294967295) umstellen.

Kategorien
MySQL VBA Excel

Daten exportieren/importieren von Excel 2007 nach MySQL in UTF-8

Um Daten von MS Excel 2007 zu exportieren und in eine MySQL Datenbank zu importieren sind ein paar sorgfältige Schritt notwendig.Folgende Vorgensweise ist zu empfehlen, um die Kodierung der Daten (sichtbar durch fehlende äöüß wird zu ? oder noch schlimmer:) ) des Exports aus Excel nach MySQL zu gewährleisten.

  1. Kopieren der Daten nach MS Excel
  2. in eine Tabellenform bringen
  3. Abspeichern als csv-Datei
  4. Öffnen der csv in einem Texteditor (ich verwende Notepad++)
  5. kontrollieren der letzten Zeilen, dort schleichen sich generell leere Zeile und unnötige Semikolons ein
  6. Kodierung der Datei nach UTF-8. Dazu in Notepad++: Kodierung->Kodierung zu UTF-8
  7. Anlegen der MySQL Datenbankstruktur in PHPMyAdmin, Kodierung der Text-Zeilen: utf8_general_ci
  8. Importieren auswählen, Kodierung: UTF-8, csv-Datei angeben