如何将参数绑定到多个值而不重复参数

lyr7nygr  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(308)

我准备的声明如下:

$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 . 我可以将这些重复的参数绑定到多个值并保留这些值吗 m1 以及 m2 ? 即使我必须插入许多值,绑定顺序也不会改变。

bwitn5fc

bwitn5fc1#

通常情况下,您不会像这样重复,而是准备一次语句,然后用不同的值运行两次。我不是php程序员,所以我借用了gmb的帖子:

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

我主要是想理解这样一个概念,即设置一次,然后jsut更改值并反复调用execute。。
当然,我不是php程序员。。我引用了这个:php/mysql:mysqli prepared语句在for循环中多次插入相同的值

dxpyg8gm

dxpyg8gm2#

您需要使用命名参数,而不是使用问号参数。请参阅php文档。

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

相关问题