• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[ERLEDIGT] Platzhalter in SQL-Query

Status
Für weitere Antworten geschlossen.

LeCub

Aktives Mitglied
Hi,

Ich habe einen sehr variabel zusammengestellten SQL-String, der aufgrund der großen Variabilität den Platzhalter "Noop" verwendet. Ein Ausschnitt:
SQL:
SELECT marke,modell,klasse,liter,breite,box,laenge,gewicht,url,preis,code FROM boards WHERE marke<>noop AND klasse=noop OR klasse=freewave OR klasse=race  AND box<>noop AND box2<>noop AND minliter<=40 AND maxliter>=200 AND mingewicht<=4 AND maxgewicht>=12
Ich bin mir bewusst, dass das kein feiner Stil ist, allerdings lasse Ich den String sehr variabel aus verschieden vielen Teilstrings zusammen setzen, weshalb Ich auf die Methode mit den Noops zurückgreife.

Da es keine Marke oder Klasse mit dem Namen Noop gibt, heißt "marke<>noop " im Prinzip, dass alle Marken und Klassen rausgesucht werden sollen.
Dies Klappt allerdings nicht, sondern es wird die Fehlermedung
"Unknown column 'noop' in 'where clause' " ausgegeben, obwohl es weder eine Spalte mit dem Namen Noop gibt, noch von mir aufgerufen wird.

Sind derartige Platzhalter verboten oder habe Ich einen anderen Fehler gemacht?

Ich würde mich sehr über Hilfe freuen.

Edit: Der Fehler liegt definitiv nur am ersten "WHERE marke<>noop" und auch wenn ich den Operator oder den Wert ändere, bleibt der Fehler.
 
Zuletzt bearbeitet:
Werbung:
Wie sieht denn der String aus den Du an SQL übergibst wenn Du den Platzhalter noop durch einen Wert ersetzt hast? Du sprichst ja von Platzhalter, also musst Du ihn ja irgendwo ersetzen? Und wie?
 
Tut mir Leid, Ich habe mich falsch ausgedrückt, das sind keine Platzhalter im klassischen Sinne, sondern Ich übergebe den String so wie er oben steht.
Es soll halt nur so sein "suche alle wo der wert nicht noop ist", also alle.
 
Werbung:
Wenn Du nach einem Wert suchst musst Du diesen in Anführungszeichen schreiben. Beispiel:

Code:
box2<>'noop'
 
Haha das ist jetzt nen Witz oder:D. Vielen Dank threadi, klappt einwandfrei
 
Zuletzt bearbeitet:
SQL:
SELECT marke,modell,klasse,liter,breite,box,laenge,gewicht,url,preis,code FROM boards WHERE marke<>noop AND klasse=noop OR klasse=freewave OR klasse=race  AND box<>noop AND box2<>noop AND minliter<=40 AND maxliter>=200 AND mingewicht<=4 AND maxgewicht>=12
Da es keine Marke oder Klasse mit dem Namen Noop gibt, heißt "marke<>noop " im Prinzip, dass alle Marken und
...
Wieso gibst du sie dann eigentlich im SQL-Statement an?

SQL:
SELECT `marke`, `modell`, `klasse`, `liter`, `breite`, `box`, `laenge`, `gewicht`, `url`, `preis`, `code` FROM `boards` WHERE (`klasse` ='freewave' OR `klasse`='race')  AND `box`<>'noop' AND `box2`<>'noop' AND `minliter` <= 40 AND `maxliter` >= 200 AND `mingewicht` <= 4 AND `maxgewicht` >= 12
 
Werbung:
Wieso gibst du sie dann eigentlich im SQL-Statement an?
Meinst du die 'noops'? Die hatte Ich ursprünglich dafür gedacht, Errors im SQL-Statement zu vermeiden, die aufgetreten sind da Ich den String sehr variabel zusammenstelle.
Das geht auch ganz gut, da es ja keine Spalte mit dem Wert 'noop' gibt, weshalb das im Prinzip leere Floskeln sind, die einafch konstant da sind und so Fehler wie 'SELECT ... WHERE AND' vermeiden.
Inzwischen verwende Ich die noops aber nicht mehr, sondern entferne unnötige 'AND' u.ä. mit relplace.
 
Meinst du die 'noops'? Die hatte Ich ursprünglich dafür gedacht, Errors im SQL-Statement zu vermeiden, die aufgetreten sind da Ich den String sehr variabel zusammenstelle.
Das geht auch ganz gut, da es ja keine Spalte mit dem Wert 'noop' gibt, weshalb das im Prinzip leere Floskeln sind, die einafch konstant da sind und so Fehler wie 'SELECT ... WHERE AND' vermeiden.
Inzwischen verwende Ich die noops aber nicht mehr, sondern entferne unnötige 'AND' u.ä. mit relplace.

Puh...
Nicht falsch verstehen aber das hört sich schrecklich an und ist es mit Sicherheit auch.

Ich vermute mal du verwendest PHP?
Dann würde ich mich mal mit Doctrine auseinandersetzen.
Könnte dann so aussehen:
PHP:
$qb = $em->createQueryBuilder();
$qb->select('b')
  ->from('boards', 'b');

// hier jetzt die Suchkriterien:
$qb->andWhere('mingewicht <= :mingewicht');
$qb->setParameter('mingewicht', 4);
// usw.

$result = $qb->getQuery()
  ->getResult();

Das ist nicht nur wesentlich einfacher zu lesen/verstehen, sondern auch absolut stabil - was ich bei deinem Konstrukt stark bezweifle.
 
Ja dessen bin Ich mir bewusst und das war auch der Auslöser für meine Umstellung weg von den Noops (Hab den gesamten PHP/MySQL- Part neu gemacht), aber vielen Dank für den Hinweis, mit PHP- Frameworks habe Ich mich bisher kaum beschäftigt und Ich werde mir das mal ansehen.
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben