dedlfix: MySQL: Primärschlüsselwert wird nicht gefunden

Beitrag lesen

Tach!

und jetzt stelle ich fest, dass der Primärschlüsselwert in einer der Tabellen nicht korrekt gefunden wird, obwohl die Suchkriterien stimmen, kommt immer nur 0 raus... am besten, ich gebe euch mal den ganzen Code, angefangen mit dem MySQL-Dump:

Nee, so wird das nichts. Zum einen hast du das Problem nicht nachvollziehbar beschrieben. Was machst du, was erwartest du, was bekommst du? Und all das bitte konkret beschreiben.

Die potentiellen Antworter sind keine XAMP-Systeme. Zuviel Code, der mit dem eigentlichen Problem nichts zu tun hat, senkt eher die Antwortwilligkeit. Wenn du vom DBMS ein unerwartetes Ergebnis bekommst, interessiert mich der PHP-Code nicht, sondern nur die Query und die dazugehörigen Tabellen und Testdaten. Wenn du jedoch PHP als die Ursache annimmst, dann möchte ich einen auf das Problem beschränkten Code haben und nicht das komplette Programm. Und wenn du diesen "Forderungen" nachkommst, hilft es aber auch dir selbst beim Einkreisen des Problems.

Ich sehe aber auf Anhieb, dass du allem Anschein nach ein Zeichenkodierungsproblem hast, was du vermutlich selbst noch gar nicht gemerkt hast.

CREATE TABLE status (
  ID tinyint(3) unsigned NOT NULL auto_increment,
  Bezeichnung varchar(20) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (ID),
  UNIQUE KEY Bezeichnung (Bezeichnung)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;

--
-- Daten für Tabelle status

INSERT INTO status VALUES (1, 'Pilotsendung');
INSERT INTO status VALUES (2, 'Regulär');
INSERT INTO status VALUES (3, 'Irregulär');

Solange du keine Umkodierung des Dumps vorgenommen hast oder ihn im Editor mit der falschen Kodierungseinstellung geöffnet hast, deutet das darauf hin, dass MySQL statt der ä die beiden hier zu sehenden Zeichen "sieht". Prüfen kannst du das über:
SELECT *, CHAR_LENGTH(Bezeichnung) FROM status
Wenn das für die Zeilen 2 und 3 als Ergebnis 7 und 9 ergibt, ist alles bestens. Bei 8 und 10 hast du aber das vermutete Problem.

function dbcall()
{
$db = mysql_connect("localhost", "root", "Menkalinan");
dberror();
$db = mysql_select_db("schwingungen");
dberror();
}

Nach dem Verbindungsaufbau hast du keine Angabe zur zu verwenden Zeichenkodierung gemacht. Vermutlich sendest du UTF-8, MySQL geht aber per Default von ISO-8859-1/Latin1 aus. Damit erkennt es die Bytesequenzen von Nicht-ASCII-Zeichen als einzelne Zeichen. Auf dem Rückweg passiert das Ganze mit umgekehrten Vorzeichen, womit sich der Fehler wieder aufhebt und du ihn nicht direkt bemerkst.

dedlfix.