MySQLi,PHP,动态生成自动化的preparedStatement



我的基本问题是为DB请求生成一个自动准备的语句

$this->stmt_prep->bind_param("sss", $input[0], $input[1], $input[X]);

基本上有2〃;变量";,我为这个请求创建:

  1. 数据类型";ssss">
  2. 用户输入字段为"$Array_as_single_Values">

假设:

$this->stmt_prep->bind_param("sss", $Array_as_single_Values);
$Array_as_single_Values = "Value1", "Value2", "ValueX"

我将UserInput读取为

$Value = Array[$input1=> value1, $input2=> value2, $inputX=> valueX]

如何将此数组的每个值转换为变量或其值

预期结果:

$Array_as_single_Values [$input1 => "value1"; 
$input2 => "value2"; 
$inputX => "valueX";]        //how to Convert this to needed Data?
$this->stmt_prep->bind_param("sss", $Array_as_single_Values);

与相同

$this->stmt_prep->bind_param("sss", $input1, $input2, $inputX);

$this->stmt_prep->bind_param("sss", "value1", "value2", "valueX");

目的:如果我有100个不同的输入值,我不必重新编写所有语句

使用splat运算符...:

$this->stmt_prep->bind_param("sssssssss", ...$Array_as_single_Values);

小示例:

function foo ($a, $b, $c)
{
echo "$a $b $c";
}
$arr = [ "hello", "world", "42" ];
foo(...$arr); // output hello world 42

在没有运算符的情况下,这会导致错误"em";致命错误:未捕获的ArgumentCountError:函数foo((的参数太少">

如果您想自动生成"s",并且确信您将只使用VARCHAR类型,您可以这样重写您的函数调用:

$this->stmt_prep->bind_param(str_repeat("s", count($Array_as_single_Values)), ...$Array_as_single_Values);

最新更新