クエリが多いほど時間がかかるため、(一度に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']
));
注:このコードはテストされておらず、私が通常操作する方法ではないため、聖書ではなくガイドとして使用してください...