Declaração preparada em PHP para atualizações de banco de dados
Esta discussão gira em torno da utilização adequada de instruções preparadas em PHP para evitar vulnerabilidades como injeções de SQL. O objetivo do bloco de código em questão é atualizar uma tabela de banco de dados com um único campo usando uma instrução preparada.
No código fornecido, o método update() no arquivo class.Scripts.inc emprega um preparado instrução em uma tentativa de atualizar a tabela datadump. No entanto, a execução não teve êxito devido a uma ordem incorreta dos parâmetros durante o método bind_param(). O código atual vincula os parâmetros na ordem de $id e $content, enquanto a instrução SQL os espera na ordem oposta, levando à identificação incorreta do registro e zero linhas sendo afetadas.
O código corrigido abaixo corrige isso. erro vinculando os parâmetros na ordem correta e fornecendo tratamento de erro adicional:
$stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?");
/* Always check whether the prepare() succeeded */
if ($stmt === false) {
trigger_error($this->mysqli->error, E_USER_ERROR);
return;
}
$id = 1;
/* Bind our params */
/* Bind variables in the same order as SQL params */
$stmt->bind_param('si', $content, $id);
/* Set our params */
/* No escaping needed when using prepared statements */
$content = $_POST['content'] ?: '';
/* Execute the prepared Statement */
$status = $stmt->execute();
/* Always check whether the execute() succeeded */
if ($status === false) {
trigger_error($stmt->error, E_USER_ERROR);
}
printf("%d Row inserted.\n", $stmt->affected_rows);
Em relação às suas consultas específicas:
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3