PHP mysqli_query «случайно» возвращает значение NULL для значения внутри сложного запроса, но в MySQL Workbench запрос неизменно точен

Предисловие — я много раз искал ответ на этот вопрос (и говорил с несколькими коллегами-разработчиками), но все еще чешу голову. Извините, если я расплывчатый или бесполезный / задаю повторяющийся вопрос, но я не могу понять это

У меня сложный SQL-запрос, который я написал в MySQL Workbench. Существует несколько производных таблиц, и всякий раз, когда я запускаю запрос внутри MySQL, я получаю именно те результаты, которые мне нужны.

К сожалению, когда я выполняю тот же запрос в PHP, я случайным образом получаю NULL для значения, возвращаемого из производной таблицы (обратите внимание, что остальные данные извлекаются успешно, но только производные таблицы отсутствуют).

Если я безупречно выполняю запрос в MySQL Workbench, но в PHP возникают проблемы, я думаю, что я выделил ту сторону, где возникает проблема, но я не понимаю, почему это происходит или как решить проблему.

Вот запрос:

SELECT
Debits.id,
Debits.memo_number,
Supplier1.name as manufacturer,
Supplier2.name as vendor,
CONCAT(Buyer.first_name,' ', Buyer.last_name) as buyer,
CONCAT(Author.first_name, ' ', Author.last_name)as author,
Debits.entry_date,
DebitStatus.name as status,
c.irTotal,
y.mdfTotal,
a.fsTotal,
b.ppTotal,
x.virTotal

FROM Debits

INNER JOIN Supplier as Supplier1
on Supplier1.id = Debits.manufacturer_id

INNER JOIN Supplier as Supplier2
on Supplier2.id = Debits.distributor_id

INNER JOIN Users as Buyer
ON Debits.buyer_id = Buyer.id

INNER JOIN Users as Author
ON Debits.entered_by_id = Author.id

INNER JOIN DebitStatus
ON DebitStatus.id = Debits.status_id

LEFT JOIN
(
SELECT VIR.debit_id, (VIR_Tiers.incentive * VIR_Tiers.claim_qty) as virTotal FROM VIR

INNER JOIN VIR_Tiers
ON VIR_Tiers.vir_id = VIR.id

GROUP BY VIR_Tiers.vir_id
) as x

on Debits.id = x.debit_id

LEFT JOIN
(
SELECT MDF.debit_id, MDF.amt_received as mdfTotal FROM MDF

GROUP BY MDF.debit_id
) as y

on Debits.id = y.debit_idLEFT JOIN
(
SELECT * FROM Debit_PartNumber
) as z

ON Debits.id = z.debit_id

LEFT JOIN (
SELECT SUM(InstantRebate.discount_amt * Debit_PartNumber.quantity) as irTotal,
InstantRebate.debit_partnumber_id

FROM InstantRebate

INNER JOIN Debit_PartNumber
ON InstantRebate.debit_partnumber_id = Debit_PartNumber.id

GROUP BY Debit_PartNumber.debit_id
) as c

ON z.id = c.debit_partnumber_id

LEFT JOIN
(
SELECT SUM(FreeShipping.amt_per_item * Debit_PartNumber.quantity) as fsTotal,
FreeShipping.debit_partnumber_id

FROM FreeShipping

INNER JOIN Debit_PartNumber
ON FreeShipping.debit_partnumber_id = Debit_PartNumber.id

GROUP BY Debit_PartNumber.debit_id
) as a
ON z.id = a.debit_partnumber_id

LEFT JOIN
(
SELECT SUM((PriceProtection.old_cost - PriceProtection.new_cost) * Debit_PartNumber.quantity) as ppTotal,
PriceProtection.debit_partnumber_id

FROM PriceProtection

INNER JOIN Debit_PartNumber
ON PriceProtection.debit_partnumber_id = Debit_PartNumber.id

) as b

ON z.id = b.debit_partnumber_id

GROUP BY Debits.id

IrTotal — единственный результат, о котором идет речь. В базе данных, для третьей строки, я ожидаю значение 601, которое возвращается через MySQL Workbench. Тот же запрос при запуске через PHP может генерировать это же значение 99/100 раз, но в сотый раз я получаю NULL.

Опять же, это только из PHP, так как каждый раз, когда я запускаю его с рабочего стола MySQL, ошибок нет. Самая необычная часть этого заключается в том, что я также распечатываю значение строки $ (перебирая цикл foreach), так как это набор результатов из базы данных, но значение остается NULL.

Есть идеи?

РЕДАКТИРОВАТЬ: код PHP

if(mysqli_num_rows($debits)){
$returnArray = [];
foreach($debits as $row){
$insertArray = array(
'id' => $row['id'],
'internal_id' => $row['memo_number'],
'manufacturer' => $row['manufacturer'],
'vendor' => $row['vendor'],
'buyer' => $row['buyer'],
'author' => $row['author'],
'entryDate' => $row['entry_date'],
'status' => $row['status'],
'grandTotal' => $row['irTotal'] + $row['ppTotal'] + $row['fsTotal'] + $row['mdfTotal'] + $row['virTotal']
);

$returnArray[] = $insertArray;}
return $returnArray;
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]