Wir stoßen auf ein Problem, bei dem wir PHP verwenden, um eine SQL-Anweisung zu erstellen, und die die Funktion preg_replace verwendet. Ive in der Dokumentation hereBau SQL mit preg_replace?
gefunden, aber ich habe Probleme zu verstehen, was unsere Muster bedeutet (das ist Legacy-Code, die ich nie mit vor gebastelt habe.)
static function buildQuery ($sql, $params)
{
error_log ("1");
error_log (print_r($params, true));
foreach ((array) $params as $k => $v)
{
$v = pg_escape_string ($v);
error_log ("2");
error_log ($v);
$sql = preg_replace ("/:$k(?=\W|$)/i", "'$v'", $sql);
}
error_log ("3");
error_log ($sql);
return $sql;
}
Das Problem, das wir zu beheben versuchen, ist bevor die preg_replace-Zeile aufgerufen wird, haben wir einen Wert, der in die Anweisung "\ \ test" mit zwei umgekehrten Schrägstrichen geht (musste den Platz hinzufügen, damit er hier angezeigt wird). Nach dieser Zeile haben die beiden Backslashes in "\ test" gewertet und wenn dies von der Datenbank in unseren Client eingelesen wird, wird es zu einem Tab gefolgt von "est" was nicht das ist was wir wollen. Ich verstehe, dass das/i damit zu tun hat, fast jeden Fall zu erkennen. das \ W scheint ein Meta-Zeichen zu sein, um ein Wort zu finden? $ k ist der Schlüssel, den ich für diese Spalte der Tabelle anwende, aber der Rest davon verstehe ich nicht, und ich weiß nicht, warum das dazu führen würde, einen Backslash zu trimmen.
Ich bin so ziemlich ein Anfänger, ich werde weiter durch die Dokumentation schauen und vielleicht wird etwas auf mich zukommen, aber ich könnte Hinweise darauf verwenden, was das bedeutet, wo ich weitere Informationen darüber finden kann, und wie Ich könnte dieses Problem beheben.
Dank
EDIT sein eine Postgres-Datenbank, Version 9.3, wenn diese relevant ist.
Warum gibt es zwei Schrägstriche in den Daten? Und wird das ein INSERT/UPDATE oder SELECT sein? – AbraCadaver
Je nachdem, ob es einen bestehenden Eintrag gibt, wird ein UPDATE- oder INSERT-Aufruf ausgeführt. Ich habe den Eindruck, dass es zwei umgekehrte Schrägstriche gibt, so dass unser Client es wieder korrekt auf einen einzelnen Backslash zurück analysieren kann. Wir brauchen Benutzereingaben, um Backslash-Zeichen einfügen zu können. – TSI25