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 ???
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
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
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
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.
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
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
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen