如何在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);