Brauche eure Hilfe bei MySql Abfrage - Geht einfach nicht

Seppi123

Erfahrenes Mitglied
Erstmal Guten morgen an die, die diesen Thread sehen :D


Also ich habe folgendes Problem, habe gestern Abend und heute Morgen schon
mir den Kopf daran zerbrochen...

Habe folgenden Code

PHP:
$abfrage = "SELECT * FROM Messages WHERE To='$uid'";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
   {
   $von = $row->Von;
   $am = $row->Am;
   $um = $row->Um;
   $id = $row->id;
   $hash = $row->Hash;
  echo '
   <tr>
   <td>'.$von.'</td>
   <td>'.$am.'</td>
   <td>'.$um.'</td>
   <td><a href="inbox.php?act=read&id='.$id.'">Lesen</a> • <a href="inbox.php?act=delete&id='.$id.'">Löschen</a></td>
   </tr>';
   }
   echo '</table>';

Wenn ich ihn ausführen möchte bekomme ich folgende Fehlermeldung:

Code:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\linkgame\messages\inbox.php on line 21

Daraus schließe ich, dass es bei dem SQL Query der Fehler liegt...
Aber die Syntax ist doch richtig oder nicht?!

Hier (falls notwendig) noch die MySql Datenbank (bzw. diese einzelne Tabelle):

Code:
-- phpMyAdmin SQL Dump
-- version 3.4.5
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Erstellungszeit: 09. Jun 2012 um 09:21
-- Server Version: 5.5.16
-- PHP-Version: 5.3.8

CREATE TABLE IF NOT EXISTS `messages` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `To` varchar(250) NOT NULL,
  `Von` varchar(250) NOT NULL,
  `Am` date NOT NULL,
  `Um` time NOT NULL,
  `Hash` varchar(250) NOT NULL,
  `Message` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

Ich hoffe ihr könnt mir hierbei weiterhelfen ....:)
 
Man beachte Groß- und Kleinschreibung.
Aus diesem Grund würde ich Tabellen und Spalten grundsätzlich klein schreiben.

Code:
CREATE TABLE IF NOT EXISTS `messages`
SQL:
SELECT * FROM Messages
Fällt dir was auf?

Grundsätzlich kann man aus der Fehlerbeschreibung eh schon viel schließen... kein gültiges Argument -> irgend ein Fehler beim Query.
 
Ich dachte MySql bzw. PHP würde es bei der Abfrage sowieso klein schreiben (automatisch), da
mir in phpMyAdmin schon aufgefallen ist, wenn ich eine neue Datenbank anlege kommt aus:

Xy

dann

xy

Also klein ^^

// EDIT:

Klappt immer noch nicht aber ich werde mal die ganzen Schreibweisen
(Groß - & Kleinschreibung) nachgucken, ob noch irgendetwas schief geht...

// EDIT²:

Alles sowohl in der Datenbank als auch im Script klein geschrieben (die Spalten)
Es geht einfach nicht und ich verstehe es auch irgendwie nicht woran es liegen kann... :(

Viellecht hilft es ja noch zu erwähnen:

Wenn ich die WHERE abfrage ausbaue geht die Abfrage...
Ich habe nachgeprüft, dass id klein geschrieben wird (wie bei dem
MySql Query...)
Aber das hilft mir ja nicht wirklich weiter, da der Benutzer seine
Nachrichten ausgegeben bekommen soll und nicht die, die nicht
an ihn bestimmt sind....
 
Zuletzt bearbeitet:
Was steht in der $uid drin?
Probiers mal so:
PHP:
$abfrage = "SELECT * FROM messages WHERE to=".(int)$uid;

Bei einem Feld mit INT brauchst du keine Anführungszeichen ( ' ).

Wie genau das mit der Groß-/Kleinschreibung ist, weiß ich selber nicht. Bei den MySQL Befehlen ist es auf jeden Fall egal!
 
Hat sich erübrigt...

Anscheinend wurde meine Spalte to falsch ausgewertet...

Ich habe sie jetzt zu genannt (Empfänger Spalte) und es klappt

Anscheinend gibt es ein Befehl namens to?


@Lime

Ja das ist die User ID aus der Datenbank (1, 2, 3, 4....), die in eine Session
gespeichert wird...

danke für den Code

Code:
(int)$uid

den werde ich zur Sicherheit auch noch einbauen :)


Und nochmal ein big thanks für die Hilfe
 
Zuletzt bearbeitet:
An so etwas hab ich nicht gedacht, ist mir aber auch schon mal passiert. Hatte eine Spalte Alter genannt... Den Befehl gibts leider auch.

(int)$variable ist dazu da, falls die Variable vorher z.B. mal so ausgesehen hat "a52" und du das a entfernt hast. Dann wird wieder eine (int)-Variable drauß.
 
Daher sollte man Spalten-, Tabellen- und Datenbanknamen immer escapen. Mit dem Backtick (`) kann man das machen, nicht zu verwechseln mit dem Single-Quote (') oder dem Akzent-Zeichen (´).
 
Zurück