sql >> Base de Datos >  >> RDS >> Mysql

¿Un atajo para actualizar una fila de tabla en la base de datos?

Más consultas significa más tiempo, por lo que si está actualizando cada campo individualmente (en lugar de una fila a la vez), tomará mucho más tiempo.

Además, es posible que desee aplicar un filtro a los valores enviados para asegurarse de que no se pueda actualizar ningún campo que no desee.

Por ejemplo, si tiene una tabla de usuarios cuyos saldos de cuenta aparecen en su contra:

id | user       | credit
==========================
1  | John Smith | 50

Si pudiera enviar un formulario a su administrador de formularios, ya que el campo "crédito" aparecería en SHOW COLUMNS... consulta, podría enviarle un envío POST, a través de un formulario destinado a ser utilizado para cambiar mi nombre, con $_POST['user'] = "Mike Rowe" y $_POST['credit'] = 9999 , y cambiaría lo anterior a:

id | user       | credit
==========================
1  | Mike Rowe  | 9999

ACTUALIZACIÓN: Solución sugerida

En lugar de confiar en que los nombres de los campos de la base de datos son seguros para manejar una consulta como esta, ¿por qué no tener su propia matriz de campos editables y simplemente recorrerlos?

$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 no ha sido probado y no es la forma en que suelo operar, así que utilícelo como una guía, no como una biblia...