सही मायने में दो बार कुछ भी लिखने कभी नहीं करने के लिए, आप डेटा की आपूर्ति करने एक सरणी का उपयोग कर सकते हैं, और है कि एक ही सरणी पर एक समारोह का उपयोग करें:
$result_set = $pdo->prepare("INSERT INTO `users` (`username`, `password`, `first_name`, `last_name`) VALUES (:username, :password, :first_name, :last_name)");
$result_set->execute(array(
':username' => '~user',
':password' => '~pass',
':first_name' => '~John',
':last_name' => '~Doe'
));
आप सरणी का उपयोग कर सकते तो बस किसी भी सरणी की तरह पारित कर दिया MySQL क्वेरी के बाध्यकारी भाग को आउटपुट करने के लिए। उदाहरण के लिए:
function bindFields($fields){
end($fields); $lastField = key($fields);
$bindString = ' ';
foreach($fields as $field => $data){
$bindString .= $field . '=:' . $field;
$bindString .= ($field === $lastField ? ' ' : ',');
}
return $bindString;
}
डेटा और स्तंभ नाम एक भी साहचर्य सरणी ($data
) से आते हैं। फिर, bindFields($data)
का उपयोग column = :column
जोड़े की एक स्ट्रिंग उत्पन्न करने के लिए MySQL क्वेरी में जोड़ रहे हैं:
$data = array(
'a_column_name' => 'column data string',
'another_column_name' => 'another column data string'
);
$query = "INSERT INTO tablename SET" . bindFields($data);
$result = $PDO->prepare($query);
$result->execute($data);
bindFields($data)
उत्पादन:
a_column_name=:a_column_name,another_column_name=:another_column_name
यह मान्य कैसे है? 'Execute' विधि कोई पैरामीटर नहीं लेती है? – Brett
@ ब्रेट ने आपने चश्मे की जांच की है? यह ... क्वेरी के पैरामीटर को पास करने के लिए आप या तो [PDOStatement :: bindParam() का उपयोग कर सकते हैं या इसे 'execute() 'method] (http://php.net/manual/en/) के माध्यम से पैरामीटर के रूप में पास कर सकते हैं pdostatement.execute.php)। – jeremy
मेरा बुरा, मैं सोच रहा था कि आप [इस] (http://php.net/manual/en/mysqli-stmt.execute.php) के बारे में बात कर रहे थे। – Brett