У меня есть этот длинный запрос, который должен выполняться внутри цикла. Я подготовил его следующим образом:Использовать переменные пользователя @ в подготовленном операторе mysqli
$stmt = $db2->prepare("
select
sum(n_pallets) as n_pallets,
taxa_pallet,
sum(valor_pallets) as valor_pallets
from
(select
A.id_order, A.n_notafiscal,
@1:= case
when C.tipo_palet like 'A' then D.PalA
when C.tipo_palet like 'B' then D.PalB
when C.tipo_palet like 'C' then D.PalC
when C.tipo_palet like 'D' then D.PalD
else E.cs_pallet
end as cases_pallet,
G.taxa_pallet,
@2 := ceil(B.quantidade/@1) as n_pallets,
G.taxa_pallet*@2 as valor_pallets
from
lop_order A inner join
lop_order_item B using (cod_fatura) inner join
lop_cliente C using (cod_cliente) inner join
deposito H using (cod_deposito) inner join
produto D using (cod_produto) left join
lop_cli_prod_pal E on
(E.cod_cliente=C.cod_cliente and
E.cod_produto=D.cod_produto) inner join
lop_transportador F on (F.cod_transportador= ?) inner join
lop_lead_time G on
(F.cod_transportador=G.cod_transportador and
A.cod_domicilio_fiscal=G.cod_domicilio_fiscal and
H.cidade=G.cidade_origem and H.UF=G.UF_origem and
G.data_inicial_vigencia<=A.data_nf and
G.data_final_vigencia>=A.data_nf)
where
A.tipo_order='E' and
A.tipo_usage<>'ZTRANS' and
A.id_order= ?
) as pal
group by id_order, n_notafiscal");
$id_order = '';
$cod_transportador_pallet = '';
$stmt->bind_param("ss", $id_order,$cod_transportador_pallet);
Обратите внимание на @ 1 и @ 2 пользовательские переменные, используемые ли вычислить значения в запросе. Этот запрос отлично работает за пределами PHP, при условии, что я заменяю данные данными.
Внутри цикла я:
// (...)
$id_order=XXX; // some data
$cod_transportador_pallet=XXX; // some data
// (...)
if(!$stmt->execute())
{
$erro .= htmlspecialchars($stmt->error)."<br>\n";
continue;
}
$stmt->bind_result($n_pallets,$valor_pallet,$valor_calculado);
$stmt->fetch();
$erro .= "$n_pallets, $valor_pallet, $valor_calculado<br>\n";
я не получаю сообщение об ошибке выполнения здесь, но три результата переменными будут установлен в 0, «» и 0, независимо от того, что я установить на два связанных приложении переменные. Мне интересно, вызвано ли это использованием «@» внутри подготовленного оператора, какой-либо подсказки?
Спасибо за помощь!
Это огромное заявление! : D – vikingmaster
Да, я знаю ... :( –
это $ mysqli-> ошибка, а не $ stmt-> ошибка –