我准备好的陈述看起来像这样:
$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
吗?即使必须插入许多值,绑定顺序也不会改变。
答案 0 :(得分:0)
您需要使用命名参数,而不是使用问号参数。参见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
));
答案 1 :(得分:0)
通常,您不会尝试像这样加倍,只需准备一次语句,然后使用不同的值运行两次。我不是PHP编码员,所以我从GMB的帖子中借来的:
DECLARE @tbl TABLE(id INT,fieldname varchar(max),fieldvalue varchar(max));
insert into @tbl VALUES(1,'lastname','hugo')
,(2,'age','23')
,(1,'ID','12')
,(2,'LastName','test');
SELECT t.id
,MAX(CASE WHEN t.fieldname='ID' THEN t.fieldvalue END) AS ID
,MAX(CASE WHEN t.fieldname='LastName' THEN t.fieldvalue END) AS LastName
,MAX(CASE WHEN t.fieldname='Age' THEN t.fieldvalue END) AS Age
,MAX(CASE WHEN t.fieldname='externalId' THEN t.fieldvalue END) AS externalId
FROM @tbl t
GROUP BY t.id
如果要插入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)
");
$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
));
在mysqli的php帮助文档中进行挖掘,我想适合您情况的代码可能更像:
$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
));
}
简而言之,我试图克服这种想法:您只需设置一次,然后jsut更改值并重复调用execute ..
请注意,我不是PHP程序员。我引用了此内容:PHP/mysql: mysqli prepared statement insert same value multiple times within for loop