如何在不重复参数的情况下将参数绑定到多个值

How to bind params to multiple values without parameter repetition

我准备好的声明如下所示:

$stmt20 = $conexao->prepare("
        INSERT INTO esc_usuarios_pgtoparcelas (parcela_codigo_plano, parcela_mes, parcela_valorBonificacao, parcela_situacao)
        VALUES
        (LAST_INSERT_ID(), ?, ?, ?),
        (LAST_INSERT_ID(), ?, ?, ?)
        ");
$stmt20->bind_param('sdssds', $m1, $zero, $parcela_situacao_prog, $m2, $zero, $parcela_situacao_prog);
$stmt20->execute();

如您所见,参数重复,$m1$m2 除外。我可以将这些重复的参数绑定到多个值并保留这些 m1m2 吗?即使我不得不插入很多值,绑定顺序也不会改变。

您需要使用命名参数,而不是使用问号参数。参见 the php docs

$stmt20 = $conexao->prepare("
        INSERT INTO esc_usuarios_pgtoparcelas (parcela_codigo_plano, parcela_mes, parcela_valorBonificacao, parcela_situacao)
        VALUES
        (LAST_INSERT_ID(), :m1, :zero, :parcela_situacao_prog),
        (LAST_INSERT_ID(), :m2, :zero, :parcela_situacao_prog)
        ");
$stmt20->execute(array(
    ':m1' => $m1, 
    ':m2' => $m2, 
    :zero => $zero, 
    :parcela_situacao_prog => $parcela_situacao_prog 
));

通常你不会像这样尝试加倍,你会准备一次你的陈述,然后 运行 用不同的值准备两次。我不是 PHP 编码员所以我从 GMB 的 post:

借来的
$stmt20 = $conexao->prepare("
        INSERT INTO esc_usuarios_pgtoparcelas (parcela_codigo_plano, parcela_mes, parcela_valorBonificacao, parcela_situacao)
        VALUES
        (LAST_INSERT_ID(), :m, :zero, :parcela_situacao_prog)
        ");

$stmt20->execute(array(
    :m => $m1, 
    :zero => $zero, 
    :parcela_situacao_prog => $parcela_situacao_prog 
));

$stmt20->execute(array(
    :m => $m2, 
    :zero => $zero, 
    :parcela_situacao_prog => $parcela_situacao_prog 
));

如果要插入 1000 个值,则准备语句一次并执行 1000 次(循环)..

$stmt20 = $conexao->prepare("
        INSERT INTO esc_usuarios_pgtoparcelas (parcela_codigo_plano, parcela_mes, parcela_valorBonificacao, parcela_situacao)
        VALUES
        (LAST_INSERT_ID(), :m, :zero, :parcela_situacao_prog)
        ");

for ($x = 0; $x <= 1000; $x++) {
  $stmt20->execute(array(
    :m => $array_of_m[$x], 
    :zero => $zero, 
    :parcela_situacao_prog => $parcela_situacao_prog 
  ));
}

在 mysqli 的 php 帮助文档中挖掘,我猜你的情况的代码可能更像:

$stmt20 = $conexao->prepare("
        INSERT INTO esc_usuarios_pgtoparcelas (parcela_codigo_plano, parcela_mes, parcela_valorBonificacao, parcela_situacao)
        VALUES
        (LAST_INSERT_ID(), ?, ?, ?)
        ");

$stmt20->bind_param('sdssds', $m, $zero, $parcela_situacao_prog);

for ($x = 0; $x <= 1000; $x++) {
    $m = $array_of_m[$x];
    $stmt20->execute();
}

主要是我试图理解这样一种观念,即您设置一次,然后只需更改值并重复调用执行..

如前所述,我不是 php 编码员..我引用了这个:PHP/mysql: mysqli prepared statement insert same value multiple times within for loop