Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Um atalho para atualizar uma linha da tabela no banco de dados?


Mais consultas significa mais tempo, portanto, se você estiver atualizando cada campo individualmente (em vez de uma linha por vez), levará muito mais tempo.

Além disso, convém aplicar um filtro aos valores enviados para garantir que nenhum campo que você não deseja atualizar possa ser.

Por exemplo, se você tiver uma tabela de usuários com saldos de contas listados:
id | user       | credit
==========================
1  | John Smith | 50

Se eu pudesse enviar um formulário para seu manipulador de formulários, pois o campo "crédito" apareceria em SHOW COLUMNS... consulta, eu poderia enviar-lhe um envio POST, através de um formulário destinado a ser usado para eu mudar meu nome, com $_POST['user'] = "Mike Rowe" e $_POST['credit'] = 9999 , e você alteraria o acima para:
id | user       | credit
==========================
1  | Mike Rowe  | 9999

ATUALIZAÇÃO: Solução sugerida

Em vez de confiar que os nomes dos campos do banco de dados são seguros para lidar com uma consulta como essa, por que não ter sua própria matriz de campos editáveis ​​e apenas fazer um loop por eles?
$editable_fields = array(
  'pg_url' ,
  'pg_title' ,
  ...
);

$form_values = array();
$sql_pattern = array();
foreach( $editable_fields as $k ){
  if( $k != 'pg_id'
      && isset( $_POST[$k] ) ){
    $form_values[$k] = $_POST[$k];
    // NOTE: You could use a variant on your above code here, like so
    // $form_values[$k] = set_variable( $_POST , $k );
    $sql_pattern[] = "$k = ?";
  }
}

$sql_pattern = 'UPDATE root_pages SET '.implode( ' , ' , $sql_pattern ).' WHERE pg_id = ?';

# use the instantiated db connection object from the init.php, to process the query
$result = $connection->run_query($sql_pattern,array_merge(
    $form_values ,
    $_POST['pg_id']
    ));

NOTA:Este código não foi testado e não é do jeito que eu costumo operar, então use-o como um guia, não uma bíblia...