MySQLi, PHP, 动态生成自动化的 preparedStatement
MySQLi, PHP, generate automated preparedStatement dynamically
我的基本问题是为数据库请求生成一个自动准备好的语句
$this->stmt_prep->bind_param("sss", $input[0], $input[1], $input[X]);
基本上有 2 个“变量”,我为此请求创建:
- 数据类型“ssss”
- 用户输入字段为“$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
如果没有运算符,这将导致错误 “致命错误:未捕获的 ArgumentCountError:函数 foo() 的参数太少”
如果您想自动生成 "s"
并且 确定 您将只使用 VARCHAR 类型,您可以 re-write 您的函数调用这 :
$this->stmt_prep->bind_param(str_repeat("s", count($Array_as_single_Values)), ...$Array_as_single_Values);
我的基本问题是为数据库请求生成一个自动准备好的语句
$this->stmt_prep->bind_param("sss", $input[0], $input[1], $input[X]);
基本上有 2 个“变量”,我为此请求创建:
- 数据类型“ssss”
- 用户输入字段为“$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
如果没有运算符,这将导致错误 “致命错误:未捕获的 ArgumentCountError:函数 foo() 的参数太少”
如果您想自动生成 "s"
并且 确定 您将只使用 VARCHAR 类型,您可以 re-write 您的函数调用这 :
$this->stmt_prep->bind_param(str_repeat("s", count($Array_as_single_Values)), ...$Array_as_single_Values);