Ergebnis 1 bis 7 von 7

Thema: debian lenny php5 postgres 8.3

  1. #1
    Ulli54 ist offline Neuer Benutzer
    Registriert seit
    21.02.2009
    Beiträge
    2

    Standard debian lenny php5 postgres 8.3

    Ich hab meinen Server diese Woche von Debian Etch auf Lenny geupdated.

    Außerdem wurde php4 auf php5 und Postgres von 7.4 auf 8.3 geupdated.

    Nun bringt eine einfache Datenbankabfrage

    require ("game_connect.inc.php");
    $ssql = "SELECT * FROM view_moreinfo WHERE id = '$game_id' ";
    $res = pg_execute($ssql);
    $row = pg_Fetch_Array($res, 0);
    $titel = $row['benennung'];
    ......

    folgende Fehler:

    Warning: pg_prepare() [function.pg-prepare]: Query failed: ERROR: syntax error at or near "$" LINE 1: SELECT * FROM view_moreinfo WHERE id = $game_id .... on line 3

    Warning: Wrong parameter count for pg_execute() in .... on line 4

    Warning: pg_fetch_array() expects parameter 1 to be resource, null given in .... on line 8

    Bis zum Update lief alles tadellos.

    Beim Googlen nach diesem Fehler, tauchen massenhaft Seiten auf, die den gleichem Fehler zeigen, aber wo das Problem liegt, ?????

    Vielleicht kann mir hier einer helfen ???

  2. #2
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Das sind gleich mehrere Fehler und deutet alles in allem auf eine unsaubere Programmierung hin. Ich fange mal an, erhebe aber keinen Anspruch auf Vollständigkeit:

    - Wird geprüft, ob überhaupt eine Datenbankverbindung aufgebaut werden konnte? Das müsste in game_connect.inc.php stehen.
    - pg_execute() möchte als Parameter auch die Datenbankverbindung bekommen, näheres steht in der PHP Dokumentation zu dieser Funktion.
    - Du prüfst nicht, ob pg_execute() überhaupt ausgeführt werden konnte. Das ist bei dir nicht der Fall, $res ist false (da es einen Fehler gab). pg_fetch_array() erwartet jedoch ein Result Handle und nicht false als Parameter, daher kommt die eine Warnung.
    - Du setzt die Variablen aus dem Web ungeprüft in deine Anfrage ein. Was passiert, wenn in $game_id mal was anderes als eine Zahl steht? Dies nennt sich SQL-Injection und ist eine weitverbreitete Schwachstelle in Webanwendungen. Auf den gängigen Seiten zu diesem Thema findest du auch Erläuterungen wie man dieses Problem umgeht.

    So, das sind die Punkte, die mir auf Anhieb aufgefallen sind. Da gibt es sicher noch mehr.
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  3. #3
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Das sind gleich mehrere Fehler
    4 Fehler in 5 Zeilen. Nette Zusammenfassung, ich wollt schon ähnlich reagieren...

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  4. #4
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Zitat Zitat von akretschmer Beitrag anzeigen
    4 Fehler in 5 Zeilen. Nette Zusammenfassung, ich wollt schon ähnlich reagieren...
    Eigentlich sogar 5: es müsste require_once() heissen, nicht require().
    Ansonsten wird der Code zum Öffnen der Datenbankverbindung ggf. mehrfacht geladen und vorher geöffnete Verbindungen werden überschrieben.

    Da waren sie wieder, die 5 Probleme ...
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  5. #5
    Ulli54 ist offline Neuer Benutzer
    Registriert seit
    21.02.2009
    Beiträge
    2

    Standard Problem debian lenny php5 postgres 8.3

    Weis ich selber das es nicht sauber programmiert ist. Hab es dann mit

    require_once ("game_connect.inc.php"); // Param = $conn
    $res = pg_query_params($conn, 'SELECT * FROM view_moreinfo WHERE id = $1 ', array($game_id));

    probiert, und dann funktionierte es.

  6. #6
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Nähe Dresden
    Beiträge
    5.337

    Standard

    Zitat Zitat von Ulli54 Beitrag anzeigen
    Weis ich selber das es nicht sauber programmiert ist. Hab es dann mit

    require_once ("game_connect.inc.php"); // Param = $conn
    $res = pg_query_params($conn, 'SELECT * FROM view_moreinfo WHERE id = $1 ', array($game_id));

    probiert, und dann funktionierte es.
    Gewöhn Dir mal ab, immer 'select *' zu machen. Auch das birgt das Potential zu netten Überraschungen...

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  7. #7
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.020

    Standard

    Zitat Zitat von Ulli54 Beitrag anzeigen
    und dann funktionierte es.
    Damit hast du jetzt einen von einem halben Dutzend Fehler beseitigt.

    Und der Rest?
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum