अधिक क्वेरी का अर्थ है अधिक समय, इसलिए यदि आप प्रत्येक फ़ील्ड को अलग-अलग अपडेट कर रहे हैं (बजाय एक बार में एक पंक्ति के), तो इसमें काफी अधिक समय लगेगा।
साथ ही, आप यह सुनिश्चित करने के लिए सबमिट किए गए मानों पर एक फ़िल्टर लागू करना चाह सकते हैं कि कोई भी फ़ील्ड जिसे आप अपडेट नहीं करना चाहते हैं, वह नहीं हो सकती है।
उदाहरण के लिए, यदि आपके पास उन उपयोगकर्ताओं की तालिका है जिनके खाते में शेष राशि सूचीबद्ध है:
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']
));
नोट:यह कोड परीक्षण नहीं किया गया है और जिस तरह से मैं आमतौर पर संचालित करता हूं, इसलिए इसे एक गाइड के रूप में उपयोग करें, न कि एक बाइबिल...