вставить несколько строк на основе условия if

0

Я возвращаю массив результатов, которые помещаю в цикл foreach, и каждый результат сравнивается с одной суммой. Пока условие выполнено, оно должно вставлять строки. Тем не менее, никакие данные никогда не вставляются в базу данных, но журналы ошибок также пусты, т.е. я не получаю ошибок.

        foreach ($invoices as $invoice) {
           if ($invoice->amount <= $this->amount) {
               $stmt = $db->prepare("INSERT INTO 'payment_link' ('amount') VALUES (:amount)");
               $stmt->bindValue(":amount", $invoice->amount, PDO::PARAM_STR);
               $stmt->execute();
           }
        }

print_r($invoices) дает мне:

Array ( [0] => App\Models\Invoice Object ( [customer_id] => [description] => [date_created] => [amount] => 300.00 [total:App\Models\Invoice:private] => [invoice_id] => [line_description] => [line_amount] => [errors] => Array ( ) ) [1] => App\Models\Invoice Object ( [customer_id] => [description] => [date_created] => [amount] => 500.00 [total:App\Models\Invoice:private] => [invoice_id] => [line_description] => [line_amount] => [errors] => Array ( ) ) ) Array ( [0] => App\Models\Invoice Object ( [customer_id] => [description] => [date_created] => [amount] => 300.00 [total:App\Models\Invoice:private] => [invoice_id] => [line_description] => [line_amount] => [errors] => Array ( ) ) [1] => App\Models\Invoice Object ( [customer_id] => [description] => [date_created] => [amount] => 500.00 [total:App\Models\Invoice:private] => [invoice_id] => [line_description] => [line_amount] => [errors] => Array ( ) ) )
  • 0
    проверьте это, if ($invoice->amount <= $this->amount) { условие, если его значение TRUE , вторая проверка print_r($invoices) what ru получает и делится результатом.
  • 0
    Спасибо. Я $this->amount равна 800, а $invoice->amount 300 и 500. Если я выведу $ invoice-> сумму, я получу 300 и 500, так что это правда. print_r в мой оригинальный вопрос сейчас ..
Показать ещё 17 комментариев
Теги:
pdo

1 ответ

0

[На основе кода в вопросе, а не обсуждения в комментариях]

Вы должны получить на глаз; спросите компьютер, почему он не вставил строки. Из документа php: $stmt->execute(); Возвращает ИСТИНА в случае успеха или ЛОЖЬ в случае неудачи. ,

Протестируйте результат и опубликуйте его в журнале ошибок (или откройте экран, все, что вам подходит).

$result = $stmt->execute();
if ($result) {
    error_log("row inserted successfully");
} 
else {
    error_log("insert FAILED");
}

Если обратной связи нет, цикл не выполняется или один из предыдущих операторов не выполнен. (Они также возвращают TRUE в случае успеха и FALSE в случае неудачи).

Если написано "вставьте НЕ УКАЗАНО ", вы можете получить более подробную информацию из PDOStatement :: errorinfo.

Если написано "строки вставлены успешно", то есть что исследовать. (Например: использует ли программа TRANSACTIONS и нуждается ли в коммите?)

Начните со сбора информации, которой у вас нет, это поможет вам отследить реальную проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню