2 Stimmen

MySQL-Fehler? Select WHERE id='1blah'

MySQL Version 5.0.67

Werfen Sie einen Blick auf diese sehr einfache Tabelle und sagen Sie mir, ob ich einen MySQL-Fehler gefunden habe. Ich habe versucht, nach einer Antwort zu suchen, aber wie Sie sich vorstellen können, ist es etwas schwierig, die richtigen Suchbegriffe zu finden

CREATE TABLE `product` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(60) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `product` VALUES (1, 'jim');
INSERT INTO `product` VALUES (2, 'bob');

Von dort aus kann ich dann Folgendes auswählen

SELECT * FROM `product` WHERE `id` = '1';

Offensichtlich wird eine Zeile zurückgegeben, aber das gilt auch für diese

SELECT * FROM `product` WHERE `id` = '1blah';

Ähm ... WARUM? Das ist doch sicher falsch, oder bin ich verrückt geworden? Ich werde das Web noch ein wenig durchforsten, bevor ich einen Fehlerbericht bei MySQL einreiche.

5voto

John Parker Punkte 53226

Es wandelt die Zeichenkette "1blah" automatisch in eine Ganzzahl um. Da die Zeichenkette mit einer "1" beginnt, ist die resultierende ganze Zahl einfach 1.

Es geht also nur darum, das Richtige zu tun, auch wenn es vielleicht etwas kontraintuitiv erscheint.

2voto

Kel Punkte 7510

Dies geschieht aufgrund einer Typkonvertierung. Da Ihre Spalte einen Integer-Wert hat, wird '1blah' in 1 umgewandelt. Siehe bitte http://dev.mysql.com/doc/refman/5.0/en/type-conversion.html für weitere Einzelheiten.

0voto

Riedsio Punkte 9460

Wenn Sie die Integer-ID nicht in Anführungszeichen einschließen würden, würde es funktionieren y erhalten Sie, wie erhofft, eine Fehlermeldung. Das heißt,

SELECT * FROM `product` WHERE `id` = 1;

1 row in set

funktioniert, während

SELECT * FROM `product` WHERE `id` = 1blah;

ERROR 1054 (42S22): Unknown column '1blah' in 'where clause'

Fehler.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X