Как связать параметры с несколькими значениями без повторения параметров - PullRequest
0 голосов
/ 07 декабря 2018

Мое подготовленное утверждение выглядит примерно так:

$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?Даже если бы мне пришлось вставить много значений, порядок привязки не изменился бы.

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Как правило, вы не пытаетесь сгибаться, как это, вы готовите свое утверждение один раз и запускаете его дважды с разными значениями.Я не программист 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 
  ));
}

Копаясь в справочной документации по php для mysqli, я думаю, код для вашей ситуации может быть больше похож на:

$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 ..

Как notd, я не php-кодер. Я ссылался на это: PHP / mysql: mysqli подготовил операторвставить одно и то же значение несколько раз в течение цикла

0 голосов
/ 07 декабря 2018

Вместо использования параметров вопросительного знака вам нужно использовать именованные параметры .См. 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 
));
...