Tidak... ini jelas lebih sulit daripada PDO dengan larik apa pun karena cara mysqli_stmt_bind_param()
berfungsi... dan ini berfungsi dengan baik dengan mengubah $array
untuk menghapus/menambahkan data untuk kolom lain.
$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..."; }
}
Saya mendapat bantuan dari posting SO ini:
- https://stackoverflow.com/a /15933696/623952
- https://stackoverflow.com/a/6179049/623952
Jadi... di $stmt->bind_param()
parameter pertama adalah string yang memiliki satu karakter untuk setiap parameter yang dilewatkan. Dan karakter tersebut mewakili tipe data parameter. Pada contoh di atas, kedua parameter tersebut adalah string sehingga menjadi ss
. Sebuah string juga selalu diasumsikan dalam contoh di atas.
Saya menemukan bagan ini di bind_param()
dokumentasi:
jenis
Sebuah string yang berisi satu atau lebih karakter yang menentukan jenis untuk variabel mengikat yang sesuai:
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