如何在PHP中执行参数数目未知的insert查询?

如何在PHP中执行参数数目未知的insert查询?,php,sql,mysqli,Php,Sql,Mysqli,假设我已经提供了所有这些: 表名 包含表中列名称的数组 一个对应的数组,其中包含要插入到表中的值以及这些值的类型 我通常会做这样的查询 $stmt = mysqli_stmt_init($mysqli); if (mysqli_stmt_prepare($stmt, 'INSERT INTO `Table` (columns) VALUES (values) ')) { mysqli_stmt_bind_param($stmt, /* types */, /* values */);

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

  • 表名
  • 包含表中列名称的数组
  • 一个对应的数组,其中包含要插入到表中的值以及这些值的类型
我通常会做这样的查询

$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);
}
但我不知道如何使它更通用,以便输入列名、值和类型并执行查询


最好的方法是什么?我希望不必为此安装库。

对于列名称,您只需对列数组进行
内爆
,然后
sprintf
将其放入查询中即可

对于类型,您还可以
将其内爆
为字符串,并将其馈送到
mysqli_stmt_bind_param

对于您必须执行的一些复杂操作的值(使用):


对于列名称,您可以对列数组进行
内爆
,然后
sprintf
将其放入查询中

对于类型,您还可以
将其内爆
为字符串,并将其馈送到
mysqli_stmt_bind_param

对于您必须执行的一些复杂操作的值(使用):


我成功地将关联数组用于参数-键是列名,值是,呃,值。我成功地将关联数组用于参数-键是列名,值是,呃,值。我尝试过,但是我收到一个错误,它说,
bind_param
在需要引用时收到了一个值作为第二个参数。@PeterOlson ahhh抱歉,我忘记了
&
立即尝试:-)谢谢,它成功了。我几个小时前就该问这个问题了。不过,我确实有一个更正,必须作为引用的不是
$stmt
,而是
$value
@PeterOlson,所以它是
$args[]=&$value
?我试过了,但我得到一个错误,说
绑定参数
在需要引用时收到了一个值作为第二个参数。@PeterOlson啊,对不起,我忘记了
&
现在就试试:-)谢谢,它成功了。我几个小时前就该问这个问题了。不过,我确实有一个更正,必须作为参考的不是
$stmt
,而是
$value
@PeterOlson,所以它是
$args[]=&$value
$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);