sql >> データベース >  >> RDS >> Mysql

データベースのテーブル行を更新するためのショートカット?

    クエリが多いほど時間がかかるため、(一度に1行ずつではなく)各フィールドを個別に更新する場合は、かなり時間がかかります。

    また、送信された値にフィルターを適用して、更新したくないフィールドが更新されないようにすることもできます。

    たとえば、アカウントの残高がリストされているユーザーのテーブルがある場合:

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

    「クレジット」フィールドがSHOW COLUMNS...に表示されるため、フォームハンドラーにフォームを送信できれば クエリ、$_POST['user'] = "Mike Rowe"を使用して、名前を変更するために使用することを目的としたフォームを使用して、POST送信を送信できます。 および $_POST['credit'] = 9999 、上記を次のように変更します:

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

    更新: 推奨される解決策

    データベースフィールド名がこのようなクエリの処理に安全に使用できると信頼するのではなく、編集可能なフィールドの独自の配列を用意して、それらをループしてみませんか?

    $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']
        ));
    

    注:このコードはテストされておらず、私が通常操作する方法ではないため、聖書ではなくガイドとして使用してください...




    1. postgresqlデータベースで大文字と小文字を区別しない照合を使用するにはどうすればよいですか?

    2. エラーコード1292-誤ったDOUBLE値を切り捨てました-Mysql

    3. PDOはMySQLデータベースに単純な配列を挿入します

    4. SQL Serverで「datetimeoffset」を「time」に変換します(T-SQLの例)