पहले पैटर्न के बारे में:
- आपको किसी कैप्चर समूह की आवश्यकता नहीं है बस
\K
. का उपयोग करें फुलस्ट्रिंग मैच को फिर से शुरू करने के लिए। - मैं
'[^']*'
का उपयोग करूंगा आपके इनपुट स्ट्रिंग के पहले/खाली सिंगल कोटेड कंपोनेंट पर बस अगर कुछ टेक्स्ट उस स्थिति को भर देता है।
आपकी क्वेरी के बारे में:
- यह असुरक्षित है। आपको सुरक्षा उद्देश्यों के लिए उपयोगकर्ता द्वारा सबमिट किए गए डेटा को सीधे क्वेरी में सम्मिलित नहीं करना चाहिए।
- यहां
?
प्लेसहोल्डर्स का उपयोग किया जाता है। - चूंकि प्लेसहोल्डर्स/पैराम्स-टू-बी-बाउंड परिवर्तनशील हैं,
call_user_func_array()
का कनवल्शन आवश्यक है। - मैंने
bind_result()
भी लागू किया है परिणामसेट के प्रसंस्करण में सहायता करने के लिए।
परीक्षण न किया गया कोड:
$_POST['newfeatured']="new myProduct('', 'bbc_609'),
new myProduct('', '35857'),";
if(preg_match_all("/new (?:my|featured)Product\('[^']*', '\K[^']*/",$_POST['newfeatured'],$prd_ids)){
$params=$prd_ids[0]; // the fullstring matches
$count=count($params); // number of fullstring matches
$csph=implode(',',array_fill(0,$count,'?')); // comma-separated placeholders
$query="SELECT A.productid, A.name, A.brand, B.code
FROM product A
INNER JOIN price B ON A.productid=B.productid
WHERE A.productid IN ($csph);";
$stmt=$mysqli->prepare($query); // for security reasons
array_unshift($params,str_repeat('s',$count)); // prepend the type values string
$ref=[]; // add references
foreach($params as $i=>$v){
$ref[$i]=&$params[$i]; // pass by reference as required/advised by the manual
}
call_user_func_array([$stmt,'bind_param'],$ref);
$stmt->execute();
$stmt->bind_result($id,$name,$brand,$code);
while($stmt->fetch()){
echo "Whatever you want to do with the results: $id, $name, $brand, $code\n";
}
$stmt->close();
}else{
echo "bonk";
}