具有可变输入的准备语句

prepared statement with varable inpunt

我正在尝试制作一个包含可变输入变量的预准备语句。 例如:

$sql = "INSERT INTO MyGuests (firstname, lastname, email, tel) VALUES (?, ?, ?, ?)";
$types = "ssss";
$result_array = array of four different strings
$update = $conn->prepare($sql);
$update->bind_param($types,$result_array);

我知道这行不通,但这是一个例子

注意:

result_array,$sql 中的类型和字段的金额始终相同

所以如果 result_array 有 5 个值,那么 $types 和 $sql 中的值也会有 5

但它可以在我的代码中变化,因此 5 个值也可以是 6 个或 2 个值

所以我的问题是:

准备好的语句中是否可以有可变数量的输入值

使用 PDO 会更容易,但对于本示例,您有一个数组,因此您可以计算它并构建您需要的内容。如果您已经 $result_array:

// build placeholders ?, ? based on array length
$vals = implode(',', array_fill(0, count($result_array), '?'));

// use $vals placeholders
$sql = "INSERT INTO MyGuests (firstname, lastname, email, tel) VALUES ($vals)";

// build types based on array length *this is only string
$types = str_repeat('s', count($result_array));

$update = $conn->prepare($sql);

// unpack the array to individual arguments with splat ...    
$update->bind_param($types, ...$result_array);

注意:如果$result_array是一个关联数组(字符串索引)那么你必须先使用array_values然后在[=14中使用它=] 与 ....