我正在尝试使用 mysqli 准备好的语句将值插入数据库。将插入的值在运行时会有所不同,因此我尝试使用变量而不是列出所有参数。我已经看到我可以使用 call_user_func_array 来实现此目的,但这似乎不起作用。
到目前为止,我的代码如下,尽管为了简单起见大大减少和修改:
// in the real world, these will be set dynamically
$table = 'my_table';
$sql_fields = 'field_1,field_2,field_3,field_4';
$sql_types = 'ssss';
$sql_holders = '?,?,?,?';
$data = array('value_1', 'value_2', 'value_3', 'value_4');
$stmt = $con->prepare("INSERT INTO $table ($sql_fields) VALUES ($sql_holders)");
$params = array_merge(array($sql_types), $data);
call_user_func_array(array($stmt, "bind_param"), $params);
如果我 var_dump $params,我会得到以下内容。
array(5) {
[0]=>
string(4) "ssss"
[1]=>
string(7) "value_1"
[2]=>
string(7) "value_2"
[3]=>
string(7) "value_3"
[4]=>
string(7) "value_4"
}
这对我来说似乎没问题,但是当我运行脚本时,PHP 崩溃了。我可以注释掉“call_user_func_array”行并且它可以工作。显然什么也没发生,但也没有崩溃。
恐怕我对我的环境不太了解,除了我使用的是 PHP 7、PhpStorm IDE 和 WAMP。当 PHP 崩溃时,我收到 PhpStorm 错误“CLI 已停止工作”。我的研究告诉我,这个错误是 PHP 崩溃而不是 IDE,所以问题应该出在我的代码上。 (顺便说一句,我在两台运行 PhpStorm 的机器上尝试过并得到相同的结果,因此这项研究似乎得到了验证)
有人能解释一下吗?
Thanks