0

私は mysqli_real_escape_string() でいくつかの読み取りを行ってきましたが、コンテンツを適切にエスケープした後、再度引き出したときに適切に表示するのに問題があります。

ここに私が持っているコードがあります:

function update_section_content() {
    $name = mysqli_real_escape_string($this->conn, $_POST['name']);
    $text = mysqli_real_escape_string($this->conn, $_POST['content']);

    // First, we do an update
    $update_query = "UPDATE sections SET content = ? WHERE name = ?";
    if($update_stmt = $this->conn->prepare($update_query)) {
        $update_stmt->bind_param('ss', $text, $name);
        $update_stmt->execute();
        // If the update was successful, read in what we just updated
        if($update_stmt->affected_rows == 1) {
            $read_query = "SELECT content FROM sections WHERE name = ?";
            if($read_stmt = $this->conn->prepare($read_query)) {
                $read_stmt->bind_param('s', $name);
                    $read_stmt->execute();
                $read_stmt->bind_result($content);
                if($read_stmt->fetch()) {
                    echo nl2br($content);
                }
            }
        }
        $read_stmt->close();
        $update_stmt->close();
}

次のコードに対する私の希望は、レコードを更新して不正な文字をエスケープし、成功すると、以前の視覚的な整合性を維持しながら更新されたクエリを読み戻すことでした。(つまり、このコンテンツがエコーされるテキストエリアに、br タグではなく改行を表示したいのです。)

残念ながら、今のところ、エスケープ後にまだ改行文字が表示されています。私は何が欠けていますか?

お時間を割いていただき、ありがとうございました。アドバイスをいただければ幸いです。

残念ながら、そうではありません。私はまだ改行文字を取得します

4

1 に答える 1

2

準備済みステートメントを使用しているため、文字列もエスケープしないでください。

文字列のエスケープは、値を SQL クエリ文字列自体に埋め込む場合に使用しますが、準備済みステートメントを使用することで、それを避けることができます。

于 2009-08-08T20:36:23.653 に答える