вставить несколько строк на основе условия if - PullRequest
0 голосов
/ 28 марта 2019

Я возвращаю массив результатов, которые помещаю в цикл 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 ( ) ) )

1 Ответ

1 голос
/ 29 марта 2019

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

Тебе нужно навести глаза; пусть компьютер скажет вам, почему он не вставил ни одной строки. Из php doc : $stmt->execute(); Возвращает TRUE в случае успеха или FALSE в случае ошибки. .

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

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

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

Если в нем указано «insert FAILED», вы можете получить более подробную информацию из PDOStatement :: errorinfo .

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...