"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como resolver a ordem incorreta dos parâmetros nas atualizações do banco de dados de instruções preparadas em PHP?

Como resolver a ordem incorreta dos parâmetros nas atualizações do banco de dados de instruções preparadas em PHP?

Publicado em 2024-11-08
Navegar:178

How to Resolve Incorrect Parameter Order in PHP Prepared Statement Database Updates?

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:

  1. A mensagem "0 linhas inseridas" que você encontrou é devida para a ordem invertida dos parâmetros. Os parâmetros id e content foram vinculados na ordem incorreta, fazendo com que a cláusula WHERE não correspondesse a nenhuma linha.
  2. Ao atualizar uma tabela, é aceitável modificar apenas os campos necessários. Outras colunas da tabela permanecerão inalteradas.
Declaração de lançamento Este artigo foi reimpresso em: 1729512196 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

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