如何在 PHP 中执行具有未知数量参数的插入查询


How do I execute an insert query with an unknown number of parameters in PHP?

假设我已经提供了所有这些:

  • 表的名称
  • 包含表中列名称的数组
  • 一个相应的数组,其中包含我要插入到表中的值,以及这些值的类型。

我通常会做这样的查询

$stmt = mysqli_stmt_init($mysqli);
if (mysqli_stmt_prepare($stmt, 'INSERT INTO `Table` (columns) VALUES (values) ')) {
  mysqli_stmt_bind_param($stmt, /* types */, /* values */);
  mysqli_stmt_execute($stmt);
  mysqli_stmt_close($stmt);
}

但是我不知道如何使其更通用,以便我可以输入我的列名称、值和类型,并执行查询。

最好的方法是什么?我宁愿不必为此目的安装库。

对于列名,您可以对列数组进行implode并将其sprintf到查询中。

对于类型,您还可以将它们implode成字符串并将它们馈送到 mysqli_stmt_bind_param 中。

对于您必须对一些棘手的操作(使用 call_user_func_array)执行的值:

$args = array(); // to be put into call_user_func_array
$args[] =& $stmt; // because the statement HAS TO be by reference.
$args[] = implode("", $types);
foreach($values as $value){
    $args[] = $value;
}
call_user_func_array("mysqli_stmt_bind_param", $args);