[Quicktip] MySQL Query-Ergebnis per Console in eine CSV Datei exportieren

Mit phpmyadmin und Konsorten ist es kein Problem, Ergebnisse von SQL Abfragen in CSV-Dateien zu exportieren. Problematisch wird es allerdings, wenn man eine aufwändigere Abfrage hat, die den php Timeout provoziert, oder aber man keinen Web-Client zu Verfügung hat. Dann greift man zur Konsolenversion von MySQL – welche diesen Export nicht direkt anbietet. Mittels ein bisschen Bash-Magie kann man sich aber behelfen:

mysql --database=database --execute="select a from b where a>1;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > filename.csv

Was passiert? Die Abfrage wird ausgeführt und die Ergebnisse werden in Textform ausgegeben. Mittels Pipe wird die Ausgabe an “sed” weitergegeben, welches diese in das CSV Format umwandelt und anschließend in die Datei “filename.csv” schreibt.

Via snipplr.com

[Quicktip] ssh Verbindung ohne Known-Hosts Eintrag

Es gibt gute Gründe, warum ssh die Fingerprints (also die virtuellen Fingerabdrücke) der Server speichert, mit denen man sich verbindet. Tut man dies nämlich erneut, so kann ssh prüfen, ob sich hinter dieser IP bzw. hinter diesem Hostnamen noch immer der gleiche Rechner befindet. Wenn nicht, gibt’s eine Warnung.

Nun gibt es aber auch Fälle, bei denen will man diesen Schutz unterbinden – vornehmlich beim Scripting. Und das macht man so:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@server

Was passiert? Mit dem ersten Parameter wird das known-hosts-File “/dev/null”, also “nichts”, verwendet. Parameter 2 gibt an, dass die Überprüfung der Fingerprints deaktiviert werden soll. Lässt man den ersten Parameter weg, so werden trotzdem die Fingerprints in der normale known-hosts-File geschrieben.

[Quicktip] GIT Commit/Merge auf github rückgängig machen

Folgendes Problem: Ihr habt ein paar Änderungen commited und auch schon gepushed – in meinem Fall zu github -, merkt dann aber, dass ihr was falsches commited habt. Was nun?

Zuerst könnt ihr mit eurem GIT Client auf die Version resetten, die noch ok war. Oder ihr macht das per Git-Bash:

git reset --hard [Hashwert des gültigen Commits]

Damit setzt ihr euren Stand direkt auf diesen Commit zurück. Achtung! Wenn ihr den Parameter –hard verwendet werden sämtliche Änderungen überschrieben – und alle nachfolgenden Commits werden gelöscht!

Anschließend führt ihr ein

git push -f

aus und schon wird der Reset auch an Github oder evtl. andere entfernte Repositories übertragen. Achtung auch hier: die nachfolgende History wird gelöscht, auch von github. Wenn ihr den Parameter -f (für “force”) weglasst, so wird euch der Push verweigert, da ihr ja einen älteren Stand als im Repository pushen wollt. Daher ist er zwingend nötig.

[php] URLs effektiver zusammensetzen

Als PHP Entwickler muss man sich ja auch ab und zu mal um den Zusammenbau von URLs kümmern – entweder wird einem diese Arbeit von einem Framework abgenommen, oder man muss manuell ran. Mir geht es hier um den manuellen Weg. Man kann da folgendermaßen rangehen:

$url = "http://host/?id=10";
if($_GET["name"] != "")
{
	$url .= '&name='$_GET["name"];
}
if($_GET["country"] != "")
{
	$url .= '&country='$_GET["country"];
}
usw.


Wie man sieht, muss man für jeden eventuellen Parameter eigene if-Abfragen bauen, deren Muster ist aber immer das gleiche. Was spricht also dagegen, es folgendermaßen zu lösen?

$url = "http://host/?id=10";
$parameters = array(
	array("name"=>"name", "value"=>$_GET["name"]),
	array("name"=>"country", "value"=>$_GET["country"])
);
foreach($parameters as $parameter)
{
	if($parameter["value"] != "")
	{
		$url .= '&'.$parameter["name"].'='.$parameter["value"];
	}
}

Ok, im ersten Moment ist der neue Code bei gleichem Ergebnis etwas umfangreicher, jedoch ergibt sich ein erheblicher Vorteil, wenn neue Parameter dazu kommen. Denn nun muss man einfach dem $parameters-Array ein neues Element hinzufügen und schon wird dieses mit in die URL eingebaut.