नहीं... यह निश्चित रूप से किसी भी सरणी के साथ पीडीओ से कठिन था क्योंकि कैसे mysqli_stmt_bind_param()
काम करता है... और यह $array
. को बदलकर ठीक काम करता है अन्य स्तंभों के लिए डेटा निकालने/जोड़ने के लिए।
$mysqli = new mysqli('localhost', 'root', 'password', 'test');
$array = array("name"=>"pineapple", "color"=>"purple");
$table_name = "fruit";
insert_data($mysqli, $array, $table_name);
function insert_data($mysqli, $array, $table_name)
{
$placeholders = array_fill(0, count($array), '?');
$keys = array();
$values = array();
foreach($array as $k => $v) {
$keys[] = $k;
$values[] = !empty($v) ? $v : null;
}
$query = "insert into $table_name ".
'('.implode(', ', $keys).') values '.
'('.implode(', ', $placeholders).'); ';
// insert into fruit (name, color) values (?, ?);
$stmt = $mysqli->prepare($query);
// create a by reference array...
$params = array();
foreach ($array as &$value) {
$params[] = &$value;
}
$types = array(str_repeat('s', count($params)));
$values = array_merge($types, $params);
/*
$values = Array
(
[0] => ss
[1] => pineapple
[2] => purple
)
*/
call_user_func_array(array($stmt, 'bind_param'), $values);
$success = $stmt->execute();
if ($success) { print "it worked..."; }
else { print "it did not work..."; }
}
मुझे इन SO पोस्ट से कुछ मदद मिली:
- https://stackoverflow.com/a /15933696/623952
- https://stackoverflow.com/a/6179049/623952
तो... $stmt->bind_param()
. में पहला पैरामीटर एक स्ट्रिंग है जिसमें पास किए गए प्रत्येक पैरामीटर के लिए एक चार है। और वह चार पैरामीटर डेटा प्रकार का प्रतिनिधित्व करता है। ऊपर के उदाहरण में, दोनों दो पैरामीटर स्ट्रिंग हैं इसलिए यह ss
बन जाता है . ऊपर के उदाहरण में भी एक स्ट्रिंग हमेशा ग्रहण की जाती है।
मुझे यह चार्ट bind_param()
. में मिला है दस्तावेज़ीकरण:
प्रकार
एक स्ट्रिंग जिसमें एक या अधिक वर्ण होते हैं जो संबंधित बाइंड चर के प्रकार निर्दिष्ट करते हैं:
Type specification chars
Character Description
i corresponding variable has type integer
d corresponding variable has type double
s corresponding variable has type string
b corresponding variable is a blob and will be sent in packets