php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 25-05-2009, 23:01
JimmDaBimm
 Registrierter Benutzer
Links : Onlinestatus : JimmDaBimm ist offline
Registriert seit: Jun 2007
Beiträge: 53
JimmDaBimm ist zur Zeit noch ein unbeschriebenes Blatt
Standard Merkwürdiges Verhalten von MySQL!?

Moin,

ersteinmal möcht ich mich für die warscheinlich missglückte Überschrift entschuldigen. Mir ist allerdings nichts kurzes und knappes eingefallen, was mein "Problem" trifft.

Irgendwie ist mir erst heute ein merkwürdiges Verhalten von MySQL aufgefallen. Undzwar geht es um folgenen Query:

Code:
SELECT Subject FROM post WHERE ID = '1asfgh'
Der Eintrag mit der ID 1 wird dennoch gefunden. Ich kann da sonst was reinschreiben... sobald die ersten Stellen übereinstimmen(funktioniert auch mit mehrstelligen Eingaben) ist MySQL der Meinung, dass die IDs übereinstimmen. Gibt es eine Möglichkeit, genau nach dem gesuchten Wert zu suchen?

Ist dieses Verhalten normal? Ich mein... ich 'arbeite' jetzt schon ewig lange mit MySQL und irgendwie ist mir das noch nie aufgefallen.
Mit Zitat antworten
  #2 (permalink)  
Alt 25-05-2009, 23:06
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Kann ich nicht nachvollziehen.

CREATE-Table-Statement ist...?
Mit Zitat antworten
  #3 (permalink)  
Alt 25-05-2009, 23:11
Abraxax
  THE REAL HAXE (Administrator)
Links : Onlinestatus : Abraxax ist offline
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.623
Abraxax befindet sich auf einem aufstrebenden Ast
Standard

"Vermutlich" ist ID ein nummerisches Feld und MySQL holt aus dem alpha-nummerischen Value den nummerischen Anteil und nutzt ihn weiter.

Weiterhin gilt natürlich, was ghostgambler gefordert hat ...
__________________
INFO: Erst suchen, dann posten! | MANUAL(s): PHP | MySQL | HTML/JS/CSS | NICE: GNOME Do | TESTS: Gästebuch | IM: Jabber.org |


Mit Zitat antworten
  #4 (permalink)  
Alt 25-05-2009, 23:16
JimmDaBimm
 Registrierter Benutzer
Links : Onlinestatus : JimmDaBimm ist offline
Registriert seit: Jun 2007
Beiträge: 53
JimmDaBimm ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Sieht wie folgt aus:

Code:
CREATE TABLE `post` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `User_ID` int(11) NOT NULL,
  `Date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `Subject` varchar(255) NOT NULL,
  `Text` text NOT NULL,
  `Tags` text NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
Mit Zitat antworten
  #5 (permalink)  
Alt 25-05-2009, 23:27
Abraxax
  THE REAL HAXE (Administrator)
Links : Onlinestatus : Abraxax ist offline
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.623
Abraxax befindet sich auf einem aufstrebenden Ast
Standard

Ich habe das Verhalten bei mir getestet. Wenn eine ID-Spalte vom Typ INT - oder ein anderer Zahlentyp - ist, werden in deinem Fall der Query beim Value die nummerischen Werte - wenn sie am Anfang stehen - genutzt und der Rest abgeschnitten.

Wenn dein Value 'asd1asfgh' ist, findest du keine Ergebnisse mit Id=1
__________________
INFO: Erst suchen, dann posten! | MANUAL(s): PHP | MySQL | HTML/JS/CSS | NICE: GNOME Do | TESTS: Gästebuch | IM: Jabber.org |


Mit Zitat antworten
  #6 (permalink)  
Alt 25-05-2009, 23:33
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von JimmDaBimm Beitrag anzeigen
Code:
SELECT Subject FROM post WHERE ID = '1asfgh'
Der Eintrag mit der ID 1 wird dennoch gefunden. Ich kann da sonst was reinschreiben...
Das ist das normale Casting-Verhalten bei der Umwandlung von Strings in nummerische Werte; in PHP ist es ganz analog.

Du kannst bspw. BINARY benutzen, um die ID ebenfalls in einen String zu casten - SELECT BINARY 1 = '1xyz' liefert 0, also false.

Ob das der optimalste Weg ist, darüber kann man ggf. streiten. Du könntest ja auch vorher schon dafür sorgen, dass nur nummerische bzw. INT-Werte in der Query landen.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #7 (permalink)  
Alt 25-05-2009, 23:53
JimmDaBimm
 Registrierter Benutzer
Links : Onlinestatus : JimmDaBimm ist offline
Registriert seit: Jun 2007
Beiträge: 53
JimmDaBimm ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Vielen Dank für die hilfreichen Antworten. Selbstverständlich sorge ich schon im Script dafür, dass nur numerische Werte im Query ankommen. Das lässt sich mit PHP ja glücklicher Weise recht gut lösen. Mir ging es in erster Linie auch nur um das Verhalten an sich.
Mit Zitat antworten
  #8 (permalink)  
Alt 26-05-2009, 00:02
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.789
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Das Verhalten ist unter PHP genauso:

PHP-Code:
var_dump(== '1asfgh');
// bool(true) 
PHP und MySQL haben ein automatisches Type-Casting.
Mit Zitat antworten
  #9 (permalink)  
Alt 26-05-2009, 00:18
JimmDaBimm
 Registrierter Benutzer
Links : Onlinestatus : JimmDaBimm ist offline
Registriert seit: Jun 2007
Beiträge: 53
JimmDaBimm ist zur Zeit noch ein unbeschriebenes Blatt
Standard

naja, ich prüfe jetzt einfach mit ctype_digit() ob nur Ziffern enthalten sind und dann past das schon .
Mit Zitat antworten
  #10 (permalink)  
Alt 26-05-2009, 00:30
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Dann mach dir auch schon mal über negative Integerwerte und Doublewerte allgemein Gedanken.
Mit Zitat antworten
  #11 (permalink)  
Alt 26-05-2009, 00:56
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.789
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von JimmDaBimm Beitrag anzeigen
naja, ich prüfe jetzt einfach mit ctype_digit() ob nur Ziffern enthalten sind und dann past das schon .
Ein reiner Cast auf Integer reicht in den meisten Fällen. Was soll schon passieren? Im blödesten Fall wird auf 0 gecastet, dann bekommt der "Angreifer" kein Ergebnis. Ich würd mir den Stress nicht antun, immer auf Dezimalziffern zu prüfen. Und wie bereits PHP-Desaster treffend bemerkt hat, ist es ja mit einer reinen Überprüfung auf Dezimalziffern nicht getan, wenn du wirklich eine wasserdichte Prüfung willst. Also entweder ganz oder gar nicht.
Mit Zitat antworten
  #12 (permalink)  
Alt 26-05-2009, 07:57
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ah, mit viel Aufwand "klappt" es bei mir dann auch.

Die Frage die ich mir allerdings eher stelle ist: Warum fragst du für eine int-Spalte mit einem String ab?
intval() in PHP vorher schon drauf und gut ist.
Wenn man dann - trotz falsch übergebenem Wert - trotzdem den korrekten Datensatz liefert, ist das doch umso besser.
Mit Zitat antworten
  #13 (permalink)  
Alt 26-05-2009, 16:30
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von ghostgambler Beitrag anzeigen
Wenn man dann - trotz falsch übergebenem Wert - trotzdem den korrekten Datensatz liefert, ist das doch umso besser.
Jein.

Wenn der Parameter aus einem URL stammt - dann führt das zu mehreren URLs, die die gleichen Inhalte liefern.
/article/1 sollte eindeutig sein - und nicht /article/1xyz und /article/1blah die gleichen Inhalte liefern.
Dagegen, den Fall zu erkennen, und auf /article/1 umzuleiten, spricht nichts - aber einfach kommentarlos den Inhalt anzuzeigen, ohne auf den Fehler in der Adresse zu reagieren, halte ich für falsch.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
mysql


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Merkwürdiges foreach Verhalten Benny-one PHP Developer Forum 17 22-12-2007 12:31
[PHP5] merkwürdiges $GLOBALS-Verhalten PHP-Desaster PHP Developer Forum 8 06-07-2007 14:41
merkwürdiges verhalten im ie bei flash Kropff Grafik / Design / Flash ... 2 21-04-2006 14:15
merkwürdiges Verhalten galaxy2 PHP Developer Forum 3 06-02-2006 09:07
Merkwürdiges Verhalten von file_get_contents jahlives PHP Developer Forum 18 05-08-2005 09:12

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Projektmanagement Damals und Heute
Projektmanagement Damals und HeuteWerfen Sie einen Blick auf das, was sich verändert hat, und entdecken Sie, wo die Zukunft dieses Gebietes hinsteuert.

18.01.2021 | Berni

Arbeitsmanagement-Tools
Arbeitsmanagement-ToolsWarum jedes Team Arbeitsmanagement-Tools benötigt. Man schätzt, dass 25% eines durchschnittlichen Mitarbeiter-Tages durch ineffiziente Arbeit vergeudet werden.

11.12.2020 | Berni


 

Aktuelle PHP Scripte

PHP Newsletter Script SuperWebMailer ansehen PHP Newsletter Script SuperWebMailer

Die webbasierte PHP Newsletter Software SuperWebMailer ist die optimale Lösung zur Durchführung eines erfolgreichen E-Mail-Marketings. Zur Nutzung des PHP Script-Pakets ist eine eigene Webpräsenz/Server mit PHP 5 oder neuer, MySQL 4 oder neuer und die

29.04.2021 mirko_swm | Kategorie: PHP/ Mail
OXID eShop

Mit OXID eshop bieten wir Ihnen eine modulare und skalierbare Internet Shopping Software mit einem hervorragenden Preis-/Leistungsverhältnis.

29.04.2021 eric.jankowfsky@ | Kategorie: PHP/ Shops
PHP-Login

Die Aufgabenstellung bestand darin, ein einfaches Login-Script zu erstellen, dass schnell und universell auf jeder Webseiten eingebaut werden kann. Der Schwerpunkt lag dabei auf der Entwicklung eines universell einsetzbarem Modul für den Login und zur

05.04.2021 Wallhalla | Kategorie: PHP/ Kundenverwaltung
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:55 Uhr.