मुझे गतिशील एसक्यूएल की लचीलापन पसंद है और मुझे सुरक्षा + तैयार वक्तव्य के बेहतर प्रदर्शन पसंद है। तो मैं वास्तव में क्या चाहता हूं गतिशील तैयार वक्तव्य है, जो परेशान करने के लिए परेशानी है क्योंकि bind_param और bind_result तर्कों की "निश्चित" संख्या स्वीकार करते हैं। इसलिए मैंने इस समस्या को हल करने के लिए एक eval() कथन का उपयोग किया। लेकिन मुझे लगता है कि यह एक बुरा विचार है। मेरा मतलब है कि मेरा मतलब हैगतिशील तैयार वक्तव्य खराब हैं? (php + mysqli के साथ)
// array of WHERE conditions
$param = array('customer_id'=>1, 'qty'=>'2');
$stmt = $mysqli->stmt_init();
$types = ''; $bindParam = array(); $where = ''; $count = 0;
// build the dynamic sql and param bind conditions
foreach($param as $key=>$val)
{
$types .= 'i';
$bindParam[] = '$p'.$count.'=$param["'.$key.'"]';
$where .= "$key = ? AND ";
$count++;
}
// prepare the query -- SELECT * FROM t1 WHERE customer_id = ? AND qty = ?
$sql = "SELECT * FROM t1 WHERE ".substr($where, 0, strlen($where)-4);
$stmt->prepare($sql);
// assemble the bind_param command
$command = '$stmt->bind_param($types, '.implode(', ', $bindParam).');';
// evaluate the command -- $stmt->bind_param($types,$p0=$param["customer_id"],$p1=$param["qty"]);
eval($command);
क्या आखिरी eval() कथन एक बुरा विचार है? मैंने परिवर्तनीय नाम $ param के पीछे मूल्यों को encapsulating द्वारा कोड इंजेक्शन से बचने की कोशिश की।
क्या किसी के पास कोई राय या अन्य सुझाव हैं? क्या ऐसे मुद्दे हैं जिनके बारे में मुझे अवगत होना चाहिए?
आप अपने प्रश्न अलग तरीके से व्यक्त करने के लिए चाहते हो सकता है थोड़ा सा शीर्षक, इसलिए अन्य लोग आपका प्रश्न अधिक आसानी से पा सकते हैं। – Tomalak