Veröffentlicht 27. Dezember 200618 j Hallo Leute, ich versuche über ein Suchfeld mit PHP eine Tabelle zu durchsuchen. Die Funktion in der DB-Zugriffsklasse sieht so aus: public function findUser($value) { $result = mysql_query("SELECT * FROM customer WHERE (user_name LIKE %'".$value."'%) OR (first_name LIKE %'".$value."'%) OR (family_name LIKE %'".$value."'%) OR (street LIKE %'".$value."'%) OR (house_no LIKE %'".$value."'%) OR (zip_code LIKE %'".$value."'%) OR (city LIKE %'".$value."'%) OR (creditcard_no LIKE %'".$value."'%) OR (email LIKE %'".$value."'%)") or die (mysql_error()); return $result; } Allerdings wirft er mir immer den Fehler: 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 '%'suchbegriff'%) OR (first_name LIKE %'suchbegriff'%) OR (family_name LIKE %'suchbegriff'%) OR (street LIKE' at line 1 Serverversion ist: 5.0.24a Ich hab nichts dazu gefunden... also jedenfalls nichts, was mir sagt, dass der obige code falsch wäre. Hat jemand nen Tipp? Grüße
27. Dezember 200618 j Setz mal die % in die einfachen Anführungszeichen. WHERE (user_name LIKE '"%.$value.%"') Ich kann leider kein PHP, aber ich hoffe, du verstehst, was ich meine. Im resultierenden SQL-String müssen die % auf jeden Fall zwischen die Anführungszeichen.
28. Dezember 200618 j Je nach Einsatzgebiet deiner Anwendung solltest du dir Gedanken machen über SQL-Injection und ob du nicht besser Stored Procedures verwenden solltest... z.B. About Security #13: Mit Stored Procedures gegen SQL-Injection - entwickler.com
28. Dezember 200618 j Stored Procedures sind in der Überlegung gewesen, aber entspricht imho nicht der Trennung von Logik und Datenspeicherung. Mal davon abgesehen kann man mit trim(), striptag() etc. auch schon einiges abfangen. Und die Anwendung dient nur zur Anschauung, also wird nie einem hacker-angriff ausgesetzt werden :-) Danke trotzdem für den Hinweis
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.