![]() |
PHP MySQL - Prozentzeichen macht Probleme
Hallo,
ich habe eine Seite in php geschrieben, bei der Werte über Formulare an eine MySQL Datenbank übermittelt werden. Das Übermitteln der Daten aus den Formular Feldern in die MySQL DB funktioniert auch tadellos. Nur habe ich folgendes Problem bei einem Vergleich von einem eingegeben Wert in einem Formular Feld und einem Wert der schon in der Datenbank steht: PHP-Code:
%000606301799889397094101040 Das Problem ist das %-Zeichen. Es soll möglich sein über die Formular Seite zu prüfen ob dieser Wert schon in der Datenbank vorhanden ist und wenn ja, soll in dem Feld 'anzahl_ausgebucht' eine 1 geschrieben werden. Dies hat den Sinn, wenn ein eingegeben Wert in der Datenbank vorhanden ist, dieser als ausgebucht in der Datenbank markiert werden soll. So sieht der Code-Abschnitt aus: PHP-Code:
Die Prozentzeichen sind in dem Feld immer vorhaden, sprich es werden immer Werte mit %123892139123 (Prozent-Zahl) eingegeben. Wenn ich es ohne % eingebe und auch der gleich Wert ohne % in der DB vorhanden ist funktioniert es! Was kann ich tun? Ich habe es auch schon so in der Abfrage versucht: PHP-Code:
Code:
1You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%000606301799889397094101040' at line 1 Habe auch schon eine andere version versucht. |
Wenn du nach dem Prozentzeichen innerhalb eines Datensatzes suchen willst musst du es escapen.
Das geht unter MySQL so ; SELECT * FROM `test` WHERE word LIKE 'Wo!%rt' ESCAPE '!' setze dem Prozentzeichen einen Charakter vorraus und definiere in in der Abfrage als Escape-Character. |
Ok, ich habe noch nicht ganz verstanden wie ich dem Prozentzeichen einen Charakter vorraus setze.
Wo geschieht dies? Im code habe ich ja eine Variable und kein ausgegebenen String mit % Zeichen (WHERE ean = $ean) . Wo und wie muss ich das ansetzen? Im übrigen habe ich mit PHP-Code:
Code:
SELECT COUNT(*) AS anzahl_ausgebucht FROM einbuchung WHERE ean = '%000606301799889397094101040' AND ausgebucht = 0 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%000606301799889397094101040' at line 1 |
Das problem ist, das in SQL das Prozentzeichen als Wildcard interpretiert wird.
Das bedeutet im schlimmsten Fall das er mehr Datensätze ändern würde als du willst. Mein Beispiel ist eigentlich selbsterklärend, im Suchstring Wo%rt wird dem Prozentzeichen ein Ausrufezeichen vorangestellt und SQL mitgeteilt, dass das Ausrufezeichen ein Escape-Zeichen ist. Damit wird das Prozentzeichen nicht mehr von SQL interpretiert sondern einfach als Teil des Strings gewertet. Ergo musst du u. U. per String-Replace dafür sorgen das vor dem Prozentzeichen ein Escape-Zeichen ist und dieses SQL bekanntmachen. |
Wildcards in mySQL bei einem EQUAL-Vergleich?
Wildcards funktionieren nur mit dem LIKE-Operator! Desweiteren hoffe ich für jokerface, dass dies keine kommerzielle Anwendung werden soll. Das was du machst ist so sicher und robust wie Windows Vista auf einem China-Netbook. |
Eshat jetzt funktioniert und zwar hatte in folgedenem Befehl folgendes gefehlt:
PHP-Code:
Noch eine andere Frage: Ich habe jetzt noch eine neue Tabelle und Seite mit "umbuchung". Dort soll es möglich sein ein Paket zb. auf einen anderen Stellplatz zu buchen. Wenn jemand was umbucht wird dies in die Tabelle "umbuchung" geschrieben. Jetzt soll wenn jemand etwas ausbucht in beiden Tabellen wo etwas gebucht ist "einbuchen" und "umbuchung" geprüft werden ob der eingegeben Wert vorhanden ist, wenn ja soll ausgebucht auf 1 gesetzt werden. Wie prüfe ich nun beide Tabellen auf vorhandene Werte ? Mit inner join, wenn ja wie? Zitat:
|
nimm dir eine auszeit von 1-3 tagen, besorg dir lektüre und lerne SQL.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 Uhr. |
Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.