पिछली बार जब मैंने जाँच की थी, तो एक स्टेटमेंट तैयार करना संभव नहीं था, जहाँ प्रभावित कॉलम तैयारी के समय अज्ञात थे - लेकिन यह बात काम करने लगती है - हो सकता है कि आपका डेटाबेस सिस्टम उन लोगों की तुलना में अधिक क्षमाशील हो, जिनका मैं उपयोग कर रहा हूँ (मुख्य रूप से पोस्टग्रेज)
स्पष्ट रूप से गलत क्या है implode() कथन, क्योंकि प्रत्येक चर को स्वयं द्वारा नियंत्रित किया जाना चाहिए, आपको सम्मिलित विवरण में फ़ील्ड सूची के चारों ओर कोष्ठक की भी आवश्यकता है।
उपयोगकर्ता परिभाषित फ़ील्ड डालने के लिए, मुझे लगता है कि आपको ऐसा कुछ करना होगा (कम से कम मैं इसे कैसे करता हूं);
$fields=array_keys($a); // here you have to trust your field names!
$values=array_values($a);
$fieldlist=implode(',',$fields);
$qs=str_repeat("?,",count($fields)-1);
$sql="insert into user($fieldlist) values(${qs}?)";
$q=$DBH->prepare($sql);
$q->execute($values);
यदि आप $a में फ़ील्ड नामों पर भरोसा नहीं कर सकते हैं, तो आपको कुछ ऐसा करना होगा
foreach($a as $f=>$v){
if(validfield($f)){
$fields[]=$f;
$values[]=$v;
}
}
जहां वैलिडफील्ड्स एक ऐसा फ़ंक्शन है जिसे आप लिखते हैं जो प्रत्येक फ़ील्डनाम का परीक्षण करता है और जांचता है कि क्या यह वैध है (एक सहयोगी सरणी बनाकर त्वरित और गंदा $valfields=array('name'=>1,'email'=>1, 'phone'=>1 ... और फिर सर्वर से फ़ील्ड नाम प्राप्त करके $valfields[$f], या (जैसा कि मैं पसंद करूंगा) के मूल्य की जांच कर रहा हूं)