【问题标题】:prepared statement with varable inpunt [duplicate]带有可变输入的准备好的语句[重复]
【发布时间】:2021-08-26 15:47:16
【问题描述】:

我正在尝试编写一个包含可变数量输入变量的准备好的语句。 例如:

$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);

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

注意:

$sql 中的结果数组、类型和字段的数量总是相同的

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

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

所以我的问题是:

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

【问题讨论】:

  • 使用 PDO 很容易。使用 mysqli 不太容易,但有一些方法,人们以前做过 - 你应该能够搜索以前的例子。

标签: php sql mysqli prepared-statement


【解决方案1】:

使用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,然后才能在bind_param... 中使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2016-12-17
    相关资源
    最近更新 更多