Como posso alternar entre mysqli_real_escape_string e nl?
-
12-09-2019 - |
Pergunta
Eu tenho lendo algumas leituras no mysqli_real_escape_string () e, depois de obter meu conteúdo corretamente escapou, estou tendo problemas para exibir corretamente quando o puxo novamente.
Aqui está o código que tenho:
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();
}
Minha esperança para o código a seguir foi que ele atualizaria um registro e escaparia de todos os caracteres ruins e, após o sucesso, lia a consulta atualizada, mantendo sua integridade visual anterior. (Ou seja, eu gostaria que, para o textarea, este conteúdo é ecoado para exibir linhas de novas e não tags BR.)
Infelizmente, a partir de agora, ainda estou recebendo personagens de nova linha mostrados após escapar. o que estou perdendo?
Muito obrigado pelo seu tempo, e qualquer conselho fornecido é muito apreciado.
Infelizmente, esse não é o caso. Eu ainda tenho personagens de nova linha
Solução
Como você está usando declarações preparadas, você também não deve escapar de suas cordas.
A fuga de string é para quando você está incorporando os valores na própria sequência de consulta SQL, mas, usando declarações preparadas, você está evitando corretamente isso.