dedlfix: Session SQL-Abfrage

Beitrag lesen

echo $begrüßung;

....$sql_string = "select name, vorname from kunden3 where kd_nr = '".$_SESSION["kd_nr"]."'";

$stmnt = OCIParse($conn, $sql_string);
OCIExecute($stmnt);
OCIFetchinto($stmnt,&$row);
$vna = $row[0];
$na = $row[1];
echo "<br>Willkomen im LogIn-Bereich, ".$vna." ".$na."!";


> Das Problem, er findet nichts in der DB. Dabei ist der komplette Datensatz vorhanden.  
> Hat von euch jemand eine Idee??  
  
Verbessere deine grundlegende Fehlersuchstrategie. Kontrollausgaben sind wichtig, um Wunsch und Wirklichkeit miteinander zu vergleichen. Verwende hierzu var\_dump(), das gibt die genaueste Information über eine Variable oder ein Ausdrucksergebnis. Besonders Datenbankfunktionen erzeugen keine PHP-Fehlermeldungen, wenn das DBMS einen Fehler meldet. Stattdessen sind die Rückgabewerte der DB-Funktionen auszuwerten und spezielle Funktionen aufzurufen, um an den Fehlermeldungstext zu gelangen, in deinem Fall oci\_error(). PHPs error\_reporting auf E\_ALL (und display\_errors auf on) zu setzen ist auch immer eine gute Idee. Damit bekommst du Hinweise auf Zugriffe auf nicht vorhandene Variablen angezeigt, die dich zusammen mit den Kontrollausgaben beim Fehlersuchen unterstützen.  
  
Bei Datenbankabfrageproblemen ist es auch hilfreich, ein zusammengesetztes Statement, das man sich zur Kontrolle ausgegeben hat, an einer DB-Konsole auszuführen. Die sind meist von Haus aus etwas auskunftsfreudiger eingestellt. Somit kannst du feststellen, ob ein Abfrageformulierungsproblem oder eins bei deiner Programmierung vorliegt.  
  
Du verwendest [OCI-Funktionen](http://de.php.net/manual/en/book.oci8.php) ohne Unterstrich. Diese sind manchmal nur ein Alias auf das Pendant mit Unterstrich, manchmal explizit missbilligt, wie ocifetchinto(). Im Prinzip sind sie aber alle missbilligt. Du musst ja sowieso das Handbuch aufsuchen, um dich über die Rückgabewerte zu informieren. Dabei kannst du dich auch gleich über aktuelle Funktionen beziehungsweise Funktionsnamen informieren.  
  
Ein weiterer Punkt ist deine Art, das Statement zusammenzusetzen. Du missachtest dabei die Möglichkeit einer SQL-Injection. Desweiteren geht es bei OCI sowieso nicht, eine Abfrage ohne Prepared Statement zu erstellen. Also kannst du auch gleich dessen Möglichkeit zur Übergabe von variablen Werten nutzen. Dann kann auch keine SQL-Injection mehr auftreten. Ein Beispiel zur Anwendung gibt es unter [oci_bind_by_name()](http://de.php.net/manual/en/function.oci-bind-by-name.php). Beachte, so wie es auf verlinkter Handbuchseite steht, dass das Feature [Magic Quotes](http://de.php.net/manual/en/security.magicquotes.php) deaktiviert ist oder [seine Auswirkungen beseitigt wurden](http://de.php.net/manual/en/security.magicquotes.disabling.php).  
  
  
echo "$verabschiedung $name";