Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

MySQL - Object ID 2

Frage Entwicklung Datenbanken

Mitglied: beckslevel91

beckslevel91 (Level 1) - Jetzt verbinden

02.10.2009, aktualisiert 08:16 Uhr, 5104 Aufrufe, 16 Kommentare

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:

01.
$stand = "SELECT stand FROM tabelle ORDER BY stand DESC LIMIT 1"; 
02.
$dbstand = $db->query($stand); 
03.
if (!$dbstand) { 
04.
		die('Der Query konnte nicht ausgeführt werden: '.$db->error); 
05.
06.
if ($dbstand->num_rows) { 
07.
echo "$dbstand"; 
08.
}
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:

01.
$stand = "SELECT MAX(stand) AS stand FROM tabelle"; 
02.
$dbstand = $db->query($stand); 
03.
...
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??
Mitglied: nxclass
02.10.2009 um 08:33 Uhr
... dann prüfe mal bitte was von der Funktion query() zurückgegeben wird - das ist sicherlich nicht der Inhalt des Datenfeldes.
Bitte warten ..
Mitglied: beckslevel91
02.10.2009 um 08:40 Uhr
Okay danke, aber wie überprüfe ich das??
Bitte warten ..
Mitglied: wakko
02.10.2009 um 09:16 Uhr
Moin,

du mußt noch eine Datenzeile aus dem Resourceobjekt auslesen:
01.
while ($row = mysql_fetch_row($dbstand)) { 
02.
echo $row[0]; 
03.
}
MfG
Bitte warten ..
Mitglied: beckslevel91
02.10.2009 um 09:26 Uhr
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.
Bitte warten ..
Mitglied: Biber
02.10.2009 um 09:38 Uhr
Moin beckslevel91,

was hältst Du denn von dem eher konservativen Ansatz, den SQL-String mit Semikolon abzuschliessen?
Gleich in Zeile 1...
01.
 $stand = "SELECT MAX(stand) AS stand FROM tabelle;"
02.
 
03.
$dbstand = $db->query($stand);  
04.
 
05.
while ($row = mysql_fetch_row($dbstand)) { 
06.
echo $row[0]; 
07.
}
Grüße
Biber
Bitte warten ..
Mitglied: nxclass
02.10.2009 um 09:44 Uhr
Entweder schaust Du mal in deinen Quellcode oder der Dokumentation des $db Objekts.
01.
echo gettype( $dbstand ); // sollte Dir Zeigen das es sich um ein Objekt handelt
Bitte warten ..
Mitglied: beckslevel91
02.10.2009 um 09:44 Uhr
Moin,

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

Gruß,

J.R.
Bitte warten ..
Mitglied: Biber
02.10.2009 um 09:48 Uhr
Moin beckslevel91,

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

Grüße
Biber
Bitte warten ..
Mitglied: nxclass
02.10.2009 um 09:49 Uhr
01.
$sSQL = <<<__SQL__ 
02.
SELECT MAX(`stand`) AS 'stand' 
03.
FROM `tabelle`; 
04.
__SQL__; 
05.
 
06.
if ( $oResult = $db->query($sSQL) ) { 
07.
    while ($aRow = mysql_fetch_assoc($oResult)) { 
08.
        echo $aRow['stand']; 
09.
10.
} else { 
11.
    die( mysql_errno($db) . " :  " . mysql_error($db). "\n" ); 
12.
}
... jetzt kommt evtl. eine Fehlermeldung.
Bitte warten ..
Mitglied: beckslevel91
02.10.2009 um 10:12 Uhr
Okay, also ich habe jetzt folgendes versucht:

01.
$db = "datenbank"; 
02.
$sSQL = <<<__SQL__ 
03.
SELECT MAX(`stand`) AS 'stand' 
04.
FROM `praktikum`; 
05.
__SQL__; 
06.
 
07.
if ( $oResult = $db->query($sSQL) ) { 
08.
    while ($aRow = mysql_fetch_assoc($oResult)) { 
09.
        echo $aRow['stand']; 
10.
11.
} else { 
12.
    die( mysql_errno($db) . " :  " . mysql_error($db). "\n" ); 
13.
}
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.
Bitte warten ..
Mitglied: nxclass
02.10.2009 um 11:12 Uhr
... ich schätze Du hast dir eine eigene DB Klasse geschrieben !? - dann solltest Du dir noch eine 'Error' Funktion mit einfügen.

01.
 
02.
/**  
03.
04.
 * @return string    String mit Fehlercode und Fehlermedlung 
05.
*/ 
06.
public funktion getError() 
07.
08.
 return mysql_errno($this->db) . ' : ' . mysql_error($this->db); 
09.
}
Bei einer Fehlermeldung: 'non Object' - ist meist ein Fehler beim Erstellen des Objekts aufgetreten. ... $db sollte ein Objekt und kein String sein !!!
Bitte warten ..
Mitglied: beckslevel91
02.10.2009 um 11:28 Uhr
Also, hier verbinde ich mich mit der DB:

01.
$db = @new mysqli('localhost', '$user', '$passwort', '$datenbank'); 
02.
if (mysqli_connect_errno()) { 
03.
    die ('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')'); 
04.
}
das meinst Du doch oder?

Gruß, und danke,

J.R.
Bitte warten ..
Mitglied: nxclass
02.10.2009 um 12:34 Uhr
... 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 ?
Bitte warten ..
Mitglied: Arano
02.10.2009 um 13:17 Uhr
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:
01.
<?php 
02.
$sQuery = "SELECT stand FROM tabelle ORDER BY stand DESC LIMIT 1"
03.
$oDbResult = $oDb->query($sQuery); 
04.
if (FALSE!==$oDbResult) { 
05.
		die('Der Query konnte nicht ausgeführt werden: '.$oDb->error); 
06.
07.
if (0 > $oDbResult->num_rows) { 
08.
    $aDbStand = $oDbResult->fetch_assoc(); 
09.
    echo $aDbStand['stand'].'<br>'
10.
11.
?>
Pi mal Daumen jedenfalls (Habe es so in den Browser getippt).


~Arano
Bitte warten ..
Mitglied: Arano
05.10.2009 um 15:34 Uhr
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
Bitte warten ..
Mitglied: beckslevel91
05.10.2009 um 15:50 Uhr
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.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Windows Server
User-ID zu Application Crash

Frage von pablovic zum Thema Windows Server ...

Hyper-V
gelöst Hyper-V gleiche Datenträger-ID bzw. Volume-ID (10)

Frage von Bernd16 zum Thema Hyper-V ...

PHP
PHP MySQL Login (7)

Frage von Yanmai zum Thema PHP ...

Webbrowser
gelöst Daten in entfernte Mysql DB schreiben (3)

Frage von nullacht15 zum Thema Webbrowser ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (15)

Frage von liquidbase zum Thema Windows Update ...

DSL, VDSL
Problem mit variernder Internetgeschwindigkeit (12)

Frage von schaurian zum Thema DSL, VDSL ...