Tag-Archive for » MySQL «

Joomla 2.5 mit neuen Funktionen

Das Open Source CMS Joomla kommt in der neuen Version 2.5 mit einigen Neuerungen daher. Dazu gehört zum Beispiel die erweiterte Suchfunktion, die nun mit Wortstämmen und automatischer Vervollständigung arbeiten kann. Die Suche an sich soll auch deutlich schneller geworden sein und dabei auch natürliche Sprache erkennen können.

Für den Webseitenersteller könnte interessant sein, dass Joomla jetzt nicht mehr nur MySQL unterstützt. Version 2.5 arbeitet auch mit dem Microsoft SQL-Server, in Kürze sollen auch PostgresSQL, SQLite, Oracle und PDO mit Joomla zusammenarbeiten.

Die mit Joomla 1.6 eingeführten automatischen Updates informieren den Admin jetzt auch, wenn ein Update zur Installation bereitsteht. Im Joomla-Blog findet man weitere Details.

MySQL: Nehme ich JOIN oder WHERE?

Als SQL-Programmierer steht man häufig vor der Frage, was eine bessere Performance hat, ein schwieriger zu lesender und verstehender JOIN oder eine entsprechende WHERE-Klausel. Als Beispiel seien hier zwei verschiedene Wege zu einer Abfrage gezeigt, mit der alle Kunden ausgewählt werden, bei denen die Kundennummer und der Typ in den beiden Tabellen kunden und kunden_tel übereinstimmen und die eine Kundennummer  größer als 1 haben:

SELECT * FROM kunden JOIN kunden_tel
ON (kunden.nr = kunden_tel.kunden_nr AND kunden.typ = kunden_tel.kunden_typ)
WHERE kunden.nr > 1;

 

SELECT * FROM kunden, kunden_tel
WHERE kunden.nr = kunden_tel.kunden_nr
AND kunden.typ = kunden_tel.kunden_typ
AND kunden.nr > 1;

Beide Abfragen wurden auf eine Kundentabelle mit ca. 50.000 Datensätzen und eine Telefontabelle mit ca. 200.000 Einträgen losgelassen, das Resultat für die beiden Varianten war nahezu gleich bei 15,5 Sekunden. Die Variante SELECT mit WHERE war marginal schneller.

Deshalb sollte man überlegen, diese häufiger vorkommende Variante, die auch auf Anhieb von mehr Programmierern verstanden wird, zu wählen. Wenn schon kein nennenswerter Geschwindigkeitsgewinn erzielt werden kann, sollte man die für Andere leichter lesbare Variante nutzen.

PHP/MySQL: Die ID eines neuen Datensatzes

Man hat schon so manchen schrägen Trick gesehen, um die ID eines neu angelegten Datensatzes herauszubekommen. Viele Leute schreiben mit dem INSERT einen definierten Wert, zum Beispiel “neu” in eines der Datenfelder, um dann genau diesen Wert in der Tabelle zu suchen und dann alle Daten in per UPDATE in den Datensatz zu schreiben. Dabei geht das auch viel einfacher:

<?php
$sql = mysql_query("INSERT INTO kunden
(Vorname, Nachname, Adresse) VALUES
('$vorname', '$nachname', '$adresse')"
);
$id = mysql_insert_id();
?>

Die Funktion mysql_insert_id() liefert die ID, die bei der letzten INSERT-Operation für ein Feld vom Typ AUTO_INCREMENT vergeben wurde. Wenn die Verbindungs-Kennung nicht angegeben wird, wird die zuletzt geöffnete Verbindung angenommen. Die Funktion liefert 0, wenn die vorhergehende Abfrage keinen AUTO_INCREMENT Wert erzeugt hat. Falls Sie den Wert zur späteren Verwendung speichern möchten, stellen Sie sicher, dass Sie mysql_insert_id() direkt nach der Abfrage aufrufen, die einen Wert erzeugt hat.

Category: PHP  Tags: , , , ,  Leave a Comment

PHP und MySQL per mysqli

Es gibt drei verschiedene Möglichkeiten für den PHP-Programmierer, auf MySQL-Datenbanken zuzugreifen. Das sind mysql, mysqli und PDO. Üblich ist die Verwendung von mysql, denn damit bleibt man kompatibel zu 4er Versionen von PHP. PDO ist ja auch schon länger bekannt und nicht datenbankspezifisch, hat sich aber unter Entwicklern kaum verbreitet.

Hier geht es um die objektorientierte mysqli-Schnittstelle, die eine elegante Programmierung und die Unterstützung von Prepared Statements bietet. Was ist also anders? Dazu ein typisches Beispiel:

// Verbindung instanziieren
$mysqli = new mysqli(“localhost”,”Benutzer”,”Passwort”,”Datenbankname”)
// Verbindung testen
if (mysqli_connect_errno()) {
echo “Keine Verbindung!”.mysqli_connect_error();
exit();
}
// Zeichensatz einstellen
$mysqli->set_charset(“utf8″);

… weiterer Programmcode …

// Verbindung trennen
$mysqli->close();

MySQL Engines

Die meisten Web-Entwickler nutzen seit über einem Jahrzehnt MySQL als Datenbank. Im Grunde ist das auch eine gute Wahl, die dem Entwickler viele Möglichkeiten eröffnet. Insbesondere unterstützt MySQL mehrere Engines, von denen InnoDB und MyISAM wohl die wichtigsten und meist verwendeten sind.

Die Engines legen die Art und Weise der physikalischen Speicherung der Tabellen fest. Dabei bietet der Typ InnoDB Transaktionen und Foreign Key-Regeln bei optimaler Performance, ist also in aller Regel die bessere Wahl. MyISAM ist beispielsweise dann vorzuziehen, wenn man eine Volltextsuche in der Tabelle machen will oder GIS-Dateien durchsuchen möchte.

Unter Linux wird bis einschließlich Version 5.1 standardmäßig MyISAM bei der Anlage einer Tabelle ausgewählt. Möchte man als Vorgabe die InnoDB – Engine wählen, trägt man in der Konfigurationsdatei my.cnf die Zeile default_storage_engine = InnoDB ein.

PHP dominiert Projekte

Eine Analyse der Projektvermittlungs-Plattform twago, die Projekte im Bereich Programmierung, Design und Service vermitelt, war PHP die gefragteste Fähigkeit im abgelaufenen Jahr. In gut 7 % aller bei twago ausgeschriebenen Projekte waren PHP-Kenntnisse gefragt.

Es folgten HTML- und MySQL-Kenntnisse mit 5% bzw. 4,8%. Damit waren PHP, HTML und MySQL 2010 die gefragtesten Skills in der Branche. Auch CSS, Flash, Java und Javascript konnten sich 2010 in den Top Ten der gefragtesten Fertigkeiten halten. Neu hinzugekommen sind AJAX und .NET von Microsoft.

Für 2011 wird eine stärkere Nachfrage für Entwickler mit Kenntnissen der App-Programmierung für Smartphones und Tabs erwartet. Dabei geht es nicht nur um Apple-Equipment wie iPhones und iPads, sondern besonders um Apps für Android-Geräte. Die Herausforderungen sind dabei Sprachen wie Objective C, Java oder C-sharp.

Category: Allgemein  Tags: , , , ,  Leave a Comment

Version 7 von Drupal erschienen

Im letzten Monat erschien die Version 7 des auf PHP basierenden CMS Drupal. Die Neuerungen und Verbesserungen betreffen neben anderen Funktionen die Barrierefreiheit sowohl bei den von Drupal erzeugten Internetseiten als auch im Backend. Neu ist auch ein Render-API und automatisierte Tests für Patches und Module, benutzerdefinierte Felder für diverse Inhalte.

Zu Drupal 7 gibt es über 800 Erweiterungsmodule. Die neue Version braucht PHP Version 5.2 mit PDO-Erweiterung für die Datenbankabstraktion und entweder MySQL 5 oder PostGre 8.3. In der 7er Version kann Drupal alternativ auch mit SQLite arbeiten. Weitere Datenbanken lassen sich über Module ansteuern.

Die REST-Schnittstelle für CouchDB und andereNoSQL-Datenbanken

Der Unterschied zwischen NoSql-Datenbanken wie zum Beispiel CouchDB und relationalen Datenbanken wie MySQL liegt darin, dass die Daten nicht in Tabellen, sondern in Dokumenten abgespeichert sind. Deshalb kann man auch nicht mit SQL darauf zugreifen.

Für den Zugriff auf solche Datenbanken gibt es die REST-HTTP-Schnittstelle. Dabei handelt es sich um eine Client-Server-Verbindung mit zustandslosem Protokoll. Mit REST können Daten in NoSQL-Datenbanken erzeugt, verändet und gelöscht werden. REST (Representational State Transfer) kann plattform- und sprachunabhängig benutzt werden.

Dabei lassen sich einfache Transaktionen auch in einem Terminalfenster ausführen, man muss dafür nicht extra ein PHP-Programm schreiben. Der Löschbefehl für die Tabelle “weihnachtslieder” sieht zum Beispiel so aus:

curl –X DELETE http://localhost:5984/weihnachtslieder

Wenn der Löschbefehl erfolgreich ausgeführt wurde, wird “ok”:true zurückgegeben. Mit der Abfrage

curl –X GET http://localhost:5984/weihnachtslieder/stillenacht

können Sie die Daten einer Zeile (Datensatz) abfragen und bekommen die CouchDB-ID, die Revisions-ID und die Daten zurückgeliefert:

(=_id”:”stillenacht”,”_rev”:”2-59348fc182736ff9584d736412b”, “interpret”:”Kinderchor Lüdinghausen”,”Lied”:”Stille Nacht”)

DB-Frontends mit Dadabik Teil 3 – Arbeiten mit Dadabik

Mit der Datei index.php bringt Dadabik schon ein komplettes Frontend mit, das die Inhalte Ihrer Tabellen pflegen kann, nicht besonders komfortabel, aber sehr funktionell.

Über die Optionsliste kann man die zu bearbeitende Tabelle auswählen. Diese Tabelle wird mit allen Datenfeldern angezeigt, wieviele Zeilen man auf einer Seite sieht, lässt sich einstellen. Vor jeder Zeile stehen Icons, über die man einen Datensatz bearbeiten, löschen oder Details sehen kann. Über das Menü legt man neue Datensätze an. Hier gibt es auch eine Suchfunktion. Man kann die Tabelle auch als CSV-Datei exportieren, wenn man den entsprechenden Link unterhalb der Liste anklickt. Das verwendete Trennzeichen kann in der config.php eingestellt werden. Achtung: Viele der Funktionen arbeiten nur, wenn die Tabelle auch einen Primärschlüssel definiert hat.

Dadabik wird häufig genutzt, um einem Kunden Zugriff auf ausgewählte Tabellen zu ermöglichen. Um diese Tabellen freizugeben, ruft man die admin.php auf. Wenn Sie dort in der Include-Liste das Häkchen der Checkbox entfernen, wird diese Tabelle nicht mehr in der Übersicht angezeigt.

DB-Frontends mit Dadabik Teil 2 – Konfiguration und Installation

Nachdem das Dadabik-Verzeichnis auf dem Server eingerichtet ist, kann man das Programm konfigurieren. Dazu öffnet man die Konfigurationsdatei /dadabik/include/config.php, in die die notwendigen Informationen ( Datenbanktyp, Host, Datenbankname, Username, Paßwort, Seiten-URL und Seitenpfad) einzutragen sind. Das Programm unterstützt neben MySQL auchPostgres, Microsoft SQL-Server und Oracle.

Als Option hat Dadabik auch eine Benutzerverwaltung. Aktiviert man die, müssen sich Benutzer mit Paßwort anmelden oder es können nur die Benutzer einen Eintrag ändern, die ihn auch angelegt haben. Die Aktivierung geschieht durch eintrag von “1″ in die Variable $enable_authentication. Setzt man $language auf “german”, bekommt man eine deutschsprachige Oberfläche.

Nach der Konfiguration von Dadabik ruft man die install.php im Browser auf, um die Installation durchzuführen. Sollte noch keine Tabelle in der Datenbank angelegt sein, meckert das Script, so dass man besser vorher eine anlegt. Wenn die Installation durchgelaufen ist, kann man das Installationsprogramm löschen.