PHP - Daten aus DB auslesen

hallo,
ich lese mit

$sql = "SELECT date, author, content FROM guestbook ORDER BY date DESC LIMIT 5"; $result = $db->query($sql); while($row = $result->fetch_assoc()) { echo "Geschrieben von: ".$row['author']." am ".$row['date']; echo $row['content']; }
die einträge aus meiner DB aus, leider sagt er mit dabei:

Fatal error: Call to a member function fetch_assoc() on a non-object in *** on line 58

eig sollte $result doch ein object sein?

wäre nett wenn mit jmd helfen könnte

mfg, andi

ps: in $db steht:

Nein, warum?

Welchen Typ der Rückgabewert von fetch_assoc hat, kannst du im Manual nachlesen.

$result ist ein array. Ich würde bei Datenbanken aber mit PDO arbeiten. Die Syntacx ist etwas anders, aber es bietet dir einige vorteile. Prepared Statements und schutz vor Sql-Injections. Wikipedia erklärt das recht gut.

Dazu vielleicht ein kleines Beispiel:

Nehmen wir mal an jemand speichert die Loginpasswörte in seine Datenbank in eine Tabelle ‘admin’ und fragt sie folgendermaßen ab:

Jetzt kann ich in das Passwortfeld folgendes eingeben.

Das Statement sieht dann so aus:

Als ergebnis bekomme ich dann den Datensatz des ersten Users zurück. Je nachdem wie das Script geschrieben ist kann dies schin reichen um mich erfolgreich eingeloggt zu haben.

Sicherlich schreibt ihr in eure Scripte noch den ein oder anderen Mechanismus um so etwas zu umgehen, aber mit PDO braucht man sich um soche Dinge keine gedanken zu machen.

Eine Datenbankabfrage sähe dann so aus:

$dbc = new PDO("mysql:host=".$server.";dbname=".$dbase, $user, $password); $sql_befehl = "INSERT INTO vorschaubild (id, name, pfad) VALUES(:id, :name, :pfad)"; $stmt = $dbc->prepare($sql_befehl); $stmt->bindParam( ':id', $data[0] ); $stmt->bindParam( ':name', $data[1] ); $stmt->bindParam( ':pfad', $data[2] ); $stmt->execute();

Dazu kann es wohl gerade in Schleifen einen Performancevorteil bringen, da das Statement wohl im Speicher der Datenbank vorgemerkt wird und lediglich die Parameter an das Statement gebunden werden.

Das bietet die MySQLi-Erweiterung, die er eh schon benutzt, allerdings auch.