Manche Abfragen auf die selbe Tabelle funktionieren nicht?

D

DanLDSkal

Aktives Mitglied
Thread Starter
Dabei seit
12.05.2008
Beiträge
130
Reaktionspunkte
1
Ich habe ein Script dass auf eine Tabelle zugreifen soll. Das funktioniert ganz gut, doch bei manchen Anweisungen weigert sich das Script die gewünschten Ergebnisse zu liefern. Das Script bekommt entweder GET oder POST und verhält sich entsprechend:
PHP:
$db_link = @mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
if ( ! $db_link ) {
	echo 'Herstellen der Verbindung zur Zeit nicht möglich: ';
	die(mysql_error());
}
$db_sel = mysql_select_db( MYSQL_DATENBANK ) or die('Auswahl der Datenbank fehlgeschlagen');
error_reporting (E_ALL);
$name=''; $pwd='';
if (isset ($_POST['name'])) {
	$name = mysql_real_escape_string($_POST["name"]);
	$name = strtolower($name);
}
if (isset ($_POST['pwd'])) $pwd = mysql_real_escape_string($_POST["pwd"]);
...
if ((isset ($_GET['email']) && $_GET['email'] != '') && (isset ($_GET['valid']) && $_GET['valid'] != '')) {
	...
	$sql = "SELECT NICKNAME FROM LOGIN WHERE (VALID='".$valid."' AND EMAIL='".$email."')";
	...
}
else {
	...
	$sql = "SELECT ID, NICKNAME FROM LOGIN WHERE (NICKNAME = '".$name."') AND (PASSWORT = '".md5 ($pwd)."')";
	...
}
Die SQL-Anweisung
SELECT ID, NICKNAME FROM LOGIN WHERE (NICKNAME = 'user') AND (PASSWORT = 'meinPasswortInMD5')
macht keine Probleme. Die Werte werden verglichen und ich bin eingeloggt. Bei
SELECT NICKNAME FROM LOGIN WHERE (VALID='zeichenkette' AND EMAIL='adresse@host.com')
aber weigert sich das Script und sagt mir
Unknown column 'adresse' in 'where clause'
In phpmyadmin liefert die selbe Abfrage jedoch das gewünschte Ergebnis.
In SHOW TABLES wird die Tabelle LOGIN übrigens nicht angezeigt, der Login funktioniert aber problemlos. Ich kenn mich gar nicht mehr aus vielleicht kann mir jemand helfen!

Ach ja, error_reporting ist auf E_ALL, keine Meldungen und bevor die Frage nach der Version kommt:
Code:
[B]MySQL[/B]
Server: Localhost via UNIX socket
Server Version: 5.1.44
Protokoll-Version: 10
Benutzer: root@localhost
MySQL-Zeichensatz: UTF-8 Unicode (utf8)
[B]Webserver[/B]
Apache/2.2.14 (Unix) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l PHP/5.3.1 mod_perl/2.0.4 Perl/v5.10.1
MySQL-Client-Version: 5.1.44
PHP Erweiterung: mysql
[B]phpMyAdmin[/B]
Versionsinformationen: 3.2.4
 
Versuch mal Spaltennamen wie Password etc. zu vermeiden. Wenn du ein reserviertes Wort erwischt, ist das nicht gut.
Versuch mal alle Spalten mit einem Prefix zu benennen... MY_PASSWORD oder COL_PASSWORD etc...

Probier es dann noch mal aus.

Ach und guck mal ob @ ein Steuerzeichen in SQL ist.
 
Zuletzt bearbeitet:
Hallo svn,

ich habe nun die Spalte umbenannt. @ ist soweit ich weiß kein Steuerzeichen. Wenn es eines wäre, würde es doch von mysql_real_escape_string() entsprechend umgewandelt werden, oder?. Geändert hat es nichts, das Problem besteht also weiterhin.

Edit: In phpmyadmin macht die selbe Anweisung genau das was sie soll, ohne Fehlermeldung.
 
Ich habe noch ein wenig herumgespielt mit dem Link und dabei verwirrendes herausgefunden. Wenn Emailadresse oder die Zeichenkette nicht mit den Daten der Datenbank übereinstimmen kommt keine Fehlermeldung. Angenommen in der Datenbank steht
Email: adresse@host.com; Valid: Zeichenkette
dann erzeugen folgende Queries keinen Fehler:
SELECT NICKNAME FROM LOGIN WHERE (VALID='Zeichenkette' AND EMAIL='adresse@host.de')
SELECT NICKNAME FROM LOGIN WHERE (VALID='JEIN' AND EMAIL='adresse@host.com')
erst wenn beide Daten mit denen in der Datenbank übereinstimmen, die Abfrage also
SELECT NICKNAME FROM LOGIN WHERE (VALID='Zeichenkette' AND EMAIL='adresse@host.com')
lautet kommt die Fehlermeldung
Unknown column 'adresse' in 'where clause'
Ich versteh' das nicht, hat jemand dafür eine Erklärung/Lösung?

Edit: Ich habe den Fehler gefunden, er war in der nächsten Abfrage, wo ich vergessen habe, den Wert in Anführungszeichen zu setzen. Kann geschlossen werden!
 
Zuletzt bearbeitet:
Zurück
Oben Unten