dedlfix: ODBC Abfrage

Beitrag lesen

SELECT vorname, nachname, gebdat FROM user WHERE vorname = '".$_POST['vn']."' AND nachname = '".$_POST['nn']."' AND gebdat = '".$_POST['tag'].".".$_POST['monat'].".".$_POST['jahr']."'

Ich finde es übersichtlicher das so zu schreiben:

$osc = array("'" => "''"); // ODBC-Special-Chars, evtl. unvollständig

$gebdat = sprintf('#%s-%s-%s#', $_POST['jahr'], $_POST['monat'], $_POST['tag']);

$selectStatement = sprintf('SELECT vorname, nachname, gebdat FROM user ' .
  'WHERE vorname = "%s" AND nachname = "%s" AND gebdat = "%s"',
  strtr($_POST['vn'], $osc),
  strtr($_POST['nn'], $osc),
  $gebdat);

Das sprintf spart eine Menge Tippfehlersuche bei den Anführungszeichen.

<durchsage type="Flughafen">Achtung Sicherheitshinweis! Verwenden Sie keine Usereingaben ungeprüft!</durchsage>
Was ist, wenn jemand O'Brian heißt, oder ungünstigerweise '; DELETE * FROM tabelle;  ?

Ein Kommentar im Manual zu odbc-exec sagt, dass das Datum in # einzuschließen sei und in der Reihenfolge Jahr, Monat, Tag anzugeben ist. Eventuell muss auch noch die Uhrzeit mit dazu...