Lassen Sie mich einen anderen Ansatz auf Ihre Frage nehmen:
Wenn Sie SQL-Abfragen haben, die so aussehen, bist du es falsch zu machen.
Prepared statements sind Ihre Freunde. SQL-Injection ist nicht dein Freund. Zu zitieren the PDO documentation:
Prepared Statements sind so nützlich, dass sie das einzige Merkmal, dass PDO auch für Treiber emulieren wird, die sie nicht unterstützen.
Vielleicht denken Sie, Sie in Ordnung sind, und Sie verwenden mysql_real_escape_string()
überall Sie müssen (und nicht versehentlich mysql_escape_string()
stattdessen verwenden). Vielleicht denken Sie, magic_quotes
und stripslashes
werden Sie speichern. Vielleicht wirst du Glück haben und es richtig machen. Aber um zu paraphrasieren Ms. Schmich: Wenn ich Ihnen nur einen Tipp für die Zukunft anbieten kann, wäre "gebrauchsfertige Aussagen".
Here is a nice StackOverflow answer illustrating them in more detail und unten ist mein Teilumsatz (ohne was auch immer es ist, den Sie mit $a
tun) zur Verwendung von vorbereiteten Anweisungen Ihres Beispiel:
$statement = $dbh->prepare("SELECT * FROM `mytable` LIMIT :offset , 10");
$statement->bindValue(":offset", ($page - 1) * 10));
$statement->execute();
Zugegeben, vielleicht haben Sie einige Legacy-Code geerbt und darum fragst du, deshalb wird meine Position ein bisschen strittig. Ich bin immer noch der Meinung, dass es am besten ist, wenn Sie auf vorbereitete Anweisungen umstrukturieren, sowohl was die Sicherheit/Funktionalität betrifft, als auch, weil sie wahrscheinlich einfacher zu lesen sind, wenn sie möglicherweise ausführlicher sind.
Ich habe viel gesehen, viel schlimmer als das. Wie willst du es überhaupt tun? Und was meinst du mit dem Parsen der SQL-Zeichenfolge beim Einfärben ihrer Schlüsselwörter? –
Deshalb wurden Variablen erfunden. Nun, nicht genau, aber sie helfen auch hier. – JJJ
Bitte, um Himmels willen ... bauen Sie Ihre SQL nicht per String concat! Entkomme zumindest den Parametern. Besser: Verwenden Sie PDO mit vorbereiteten Anweisungen. – Malax