Không ... điều này chắc chắn khó hơn PDO với bất kỳ mảng nào vì cách mysqli_stmt_bind_param ()
hoạt động ... và điều này hoạt động tốt bằng cách thay đổi $array
để xóa / thêm dữ liệu cho các cột khác.
$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..."; }
}
Tôi đã nhận được một số trợ giúp từ các bài đăng SO này:
- https://stackoverflow.com/a / 15933696/623952
- https://stackoverflow.com/a/6179049/623952
Vì vậy, ... trong $stmt->bind_param()
tham số đầu tiên là một chuỗi có một ký tự cho mỗi tham số được truyền vào. Và ký tự đó đại diện cho kiểu dữ liệu tham số. Trong ví dụ trên, cả hai tham số đều là chuỗi nên nó trở thành ss
. Một chuỗi cũng luôn được giả định trong ví dụ trên.
Tôi tìm thấy biểu đồ này trong bind_param()
tài liệu:
loại
Một chuỗi chứa một hoặc nhiều ký tự chỉ định loại cho các biến ràng buộc tương ứng:
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