beckslevel91
Goto Top

MySQL - Object ID 2

Hallo..

ich habe folgendes Problem:

Ich möchte den letzten Stand einer MySQL Datenbank auslesen. Hierfür habe ich die Spalte "stand", in die bei einer Änderung über mein Formular (PHP) automatisch das aktuelle Datum eingetragen wird.

Beim Abfragen der Datensätze möchte ich diesen Stand auch (gesondert) auslesen und anzeigen:

$stand = "SELECT stand FROM tabelle ORDER BY stand DESC LIMIT 1";  
$dbstand = $db->query($stand);
if (!$dbstand) {
		die('Der Query konnte nicht ausgeführt werden: '.$db->error);  
	}
if ($dbstand->num_rows) {
echo "$dbstand";  
}

Wenn ich das so versuche, erhalte ich immer folgende Meldung: Object id #2

Woran liegt das??
Mit der DB bin ich verbunden und die Befehle funktionieren so auch für den Rest der Daten. Habe noch was versucht, bringt aber den gleichen Fehler:

$stand = "SELECT MAX(stand) AS stand FROM tabelle";  
$dbstand = $db->query($stand);
...

Thx, in advance,

J.R.

PS: Die Object id #2 hat auch nichts mit der ID des Datensatzes zu tun..

Gibts vielleicht noch eine andere Möglichkeit, den Stand der Tabelle (wann halt die letzte Änderung war) abzufragen??

Content-Key: 126286

Url: https://administrator.de/contentid/126286

Ausgedruckt am: 29.03.2024 um 06:03 Uhr

Mitglied: nxclass
nxclass 02.10.2009 um 08:33:49 Uhr
Goto Top
... dann prüfe mal bitte was von der Funktion query() zurückgegeben wird - das ist sicherlich nicht der Inhalt des Datenfeldes.
Mitglied: beckslevel91
beckslevel91 02.10.2009 um 08:40:49 Uhr
Goto Top
Okay danke, aber wie überprüfe ich das??
Mitglied: wakko
wakko 02.10.2009 um 09:16:56 Uhr
Goto Top
Moin,

du mußt noch eine Datenzeile aus dem Resourceobjekt auslesen:
while ($row = mysql_fetch_row($dbstand)) {
echo $row;
}

MfG
Mitglied: beckslevel91
beckslevel91 02.10.2009 um 09:26:44 Uhr
Goto Top
Okay, danke hab ich eingefügt, aber nun kommt folgendes:

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /.../getdbcontent.php on line 26

Wo ist denn eigl das Problem bei der ganzen Sache?? Also die Spalte ist von Typ Date
Bei den anderen Daten die ich exakt so auslese funktioniert es doch auch^^

Gruß,

J.R.
Mitglied: Biber
Biber 02.10.2009 um 09:38:20 Uhr
Goto Top
Moin beckslevel91,

was hältst Du denn von dem eher konservativen Ansatz, den SQL-String mit Semikolon abzuschliessen?
Gleich in Zeile 1...
 $stand = "SELECT MAX(stand) AS stand FROM tabelle;";  

$dbstand = $db->query($stand); 

while ($row = mysql_fetch_row($dbstand)) {
echo $row;
}

Grüße
Biber
Mitglied: nxclass
nxclass 02.10.2009 um 09:44:06 Uhr
Goto Top
Entweder schaust Du mal in deinen Quellcode oder der Dokumentation des $db Objekts.
echo gettype( $dbstand ); // sollte Dir Zeigen das es sich um ein Objekt handelt
Mitglied: beckslevel91
beckslevel91 02.10.2009 um 09:44:34 Uhr
Goto Top
Moin,

hab ich gemacht, aber der Fehler bleibt leider gleich..

Gruß,

J.R.
Mitglied: Biber
Biber 02.10.2009 um 09:48:35 Uhr
Goto Top
Moin beckslevel91,

dann mach doch bitte erstmal ein "Select * from Tabelle;" damit du und wir wissen, ob das funktioniert.

Grüße
Biber
Mitglied: nxclass
nxclass 02.10.2009 um 09:49:52 Uhr
Goto Top
$sSQL = <<<__SQL__
SELECT MAX(`stand`) AS 'stand'  
FROM `tabelle`;
__SQL__;

if ( $oResult = $db->query($sSQL) ) {
    while ($aRow = mysql_fetch_assoc($oResult)) {
        echo $aRow['stand'];  
    }
} else {
    die( mysql_errno($db) . " :  " . mysql_error($db). "\n" );  
}
... jetzt kommt evtl. eine Fehlermeldung.
Mitglied: beckslevel91
beckslevel91 02.10.2009 um 10:12:46 Uhr
Goto Top
Okay, also ich habe jetzt folgendes versucht:

$db = "datenbank";  
$sSQL = <<<__SQL__
SELECT MAX(`stand`) AS 'stand'  
FROM `praktikum`;
__SQL__;

if ( $oResult = $db->query($sSQL) ) {
    while ($aRow = mysql_fetch_assoc($oResult)) {
        echo $aRow['stand'];  
    }
} else {
    die( mysql_errno($db) . " :  " . mysql_error($db). "\n" );  
}

folgender Fehler kommt nun:

Fatal error: Call to a member function query() on a non-object in /var/www/html/it-ausbildung/jried/getdbcontent.php on line 33

Gruß,

J.R.
Mitglied: nxclass
nxclass 02.10.2009 um 11:12:54 Uhr
Goto Top
... ich schätze Du hast dir eine eigene DB Klasse geschrieben !? - dann solltest Du dir noch eine 'Error' Funktion mit einfügen.

/** 
 *
 * @return string    String mit Fehlercode und Fehlermedlung
*/
public funktion getError()
{
 return mysql_errno($this->db) . ' : ' . mysql_error($this->db);  
}

Bei einer Fehlermeldung: 'non Object' - ist meist ein Fehler beim Erstellen des Objekts aufgetreten. ... $db sollte ein Objekt und kein String sein !!!
Mitglied: beckslevel91
beckslevel91 02.10.2009 um 11:28:44 Uhr
Goto Top
Also, hier verbinde ich mich mit der DB:

$db = @new mysqli('localhost', '$user', '$passwort', '$datenbank');  
if (mysqli_connect_errno()) {
    die ('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');  
}

das meinst Du doch oder?

Gruß, und danke,

J.R.
Mitglied: nxclass
nxclass 02.10.2009 um 12:34:56 Uhr
Goto Top
... ist etwas ungewöhnlich Programmiert - aber ok.

Dieses Konstrukt solltest Du nun auch in deiner query() Funktion einbauen um bei einer Fehlerhaften SQL Anweisung eine Meldung zu bekommen.

Du benutzt 'mysqli' statt 'mysql' - das könnte schon den Fehler aus deinem 2. Post erklähren.

PS: '... @new ...' hab ich ja noch nie gesehen - ist das PHP6 ? face-wink
Mitglied: Arano
Arano 02.10.2009 um 13:17:44 Uhr
Goto Top
mysqli = PHP-Manual: MySQL Improved Extension (de.php.net)

Ich greif mal bei deinem Eingangspost ein weil mittlerweile bestimmt keiner mehr einen Überblick über deinen derzeitigen Code hat !?

Die "query()"-Methode der MySQLi-Klasse liefert bei einem SELECT ein Objekt zurück ! PHP-Manual: mysqli::query() (de.php.net)
Dies kannst du sehr gut mit den beiden Funktionen PHP-Manual: print_r() (php.net) und PHP-Manual: var_dump()() (php.net) feststellen und sie gleichzeitig betrachten ;)

mysqli::num_rows() gibt die Anzahl der enthaltenen Datensätze zurück, sonst nichts !
Somit ist deine Variable "$dbstand" immer noch das Objekt der mysqli-Klasse welches durch die Methode "query()" zurückgegeben wurde.
Ein einfaches "echo $dbstand" kann so also auch einfach nur das ausgeben was in der Variable steht, nämlich die Referenz auf ein Objekt (Object id #2) !

Du musst jetzt also die einzelnen Datensätze aus dem Objekt "extrahieren", s. PHP-Manual: mysqli::fetch_assoc() (de.php.net)
Auf der Seite findest du auch eine einfaches (im Sinne von einfach Programmiert) Beispiel.

Wenn du nur einen einzelnen Datensatz auslesen möchtest, geht das auch (s.Beispiel) ohne "while()"-Schleife:
<?php
$sQuery = "SELECT stand FROM tabelle ORDER BY stand DESC LIMIT 1";  
$oDbResult = $oDb->query($sQuery);
if (FALSE!==$oDbResult) {
		die('Der Query konnte nicht ausgeführt werden: '.$oDb->error);  
	}
if (0 > $oDbResult->num_rows) {
    $aDbStand = $oDbResult->fetch_assoc();
    echo $aDbStand['stand'].'<br>';  
}
?>
Pi mal Daumen jedenfalls (Habe es so in den Browser getippt).


~Arano
Mitglied: Arano
Arano 05.10.2009 um 15:34:06 Uhr
Goto Top
Hey J.R.

wie sieht es aus, hast du es mittlerweile zu laufen gebracht ?

Hier noch eine kleine Korrektur zu meinem Beispiel:
Zeile 07: "0 > $oDbResult->num_rows"
Ist natürlich Blödsinn den 0 wir nie größer sein können als die Anzahl der Zeilen aus der Ergebnistabelle, höchstens gleich. Das muss also "0 < $oDbResult->num_rows" heißen.

~Arano
Mitglied: beckslevel91
beckslevel91 05.10.2009 um 15:50:24 Uhr
Goto Top
Hey,

vielen Dank für Deine Hilfe! Ich hab es jetzt sein lassen. Das war nicht so relevant dass sich der Aufwand gelohnt hätte.

trotzdem danke =)

Gruß,

J.R.