Почему не срабатывает запрос в базу?

245
06 февраля 2019, 12:10

Перебирая массив мне надо вносить данные в базу:

$i=time();
foreach ($data as $k => $value){
    if ($value[chek] == "on") {
        $i++;
        $sql = "INSERT INTO `orders` (`order_id`, `created`, `type`, `pair`, `price`, `quantity`, `amount`, `block_id`, `status`) VALUES ('$i', '$i', '$value[type]', '$value[pair]', '$value[price]', '$value[quantity]', '$value[summ]', '$value[block_id]', '$value[order_status]');";
        mysqli_query($conn,$sql);
    }
}

и это работает, строки в базе появляются. Но что-то внутри меня говорит мне, что не хорошо в цикле генерить запросы в БД, хоть явных противопоказаний к этому в документации нигде не видно. Но всё равно я делаю так:

$i=time();
foreach ($data as $k => $value){
    if ($value[chek] == "on") {
        $i++;
        $sql = "INSERT INTO `orders` (`order_id`, `created`, `type`, `pair`, `price`, `quantity`, `amount`, `block_id`, `status`) VALUES ('$i', '$i', '$value[type]', '$value[pair]', '$value[price]', '$value[quantity]', '$value[summ]', '$value[block_id]', '$value[order_status]');";
        $sqli .= $sql;

    }
}
mysqli_query($conn,$sqli);

И вот во втором случае уже не работает. Хотя если я сделаю

echo $sqli;

и вручную вставлю полученные данные в phpMyadmin, то всё вставляется корректно, строки добавляются.

Вопрос: почему если $sqli корректно сформирована и вручную добавляется в базу, то не добавляется скриптом через

 mysqli_query($conn,$sqli);

?

Answer 1
if (count($data)) {
    $i = time();
    $sql = "INSERT INTO `orders` (`order_id`, `created`, `type`, `pair`, `price`, `quantity`, `amount`, `block_id`, `status`) VALUES ";
    foreach ($data as $k => $value){
        if ($value[chek] == "on") {
            $i++;
            $type = $value['type'];
            $pair = $value['pair'];
            $price = $value['price'];
            $quantity = $value['quantity'];
            $summ = $value['summ'];
            $block_id = $value['block_id'];
            $order_status = $value['order_status'];
            $sql .= "('$i', '$i', '$type', '$pair', '$price', '$quantity', '$summ', '$block_id', '$order_status'),";
        }
    }
    $final_sql = substr($sql, 0, -1);
    mysqli_query($conn, $final_sql);
}

В phpmyadmin можно вставлять несколько запросов через ";"
Настоятельно рекомендую прислушаться к совету про PDO

READ ALSO
Интернет магазин (Доска объявлений)

Интернет магазин (Доска объявлений)

Создал доску объявлений на PHP, работает отлично, теперь надо добавить функцию "поднять в горячие", так как раньше не сталкивался такой функцией,...

275
php, проблема с авторизацией, сесия

php, проблема с авторизацией, сесия

никак немогу понять почему после разлогиневания не получается авторизироватся повторно, приходится чистить куки и только тогда авторизация...

292
Горизонтальная рулетка

Горизонтальная рулетка

Всем привет, есть уже давно слитый код горизонтальной рулетки, вопрос в том как мне после нажатия кнопки сделать так чтобы её нельзя было...

329
ActiveDataProvider - вывод записей, начиная с указанного ID

ActiveDataProvider - вывод записей, начиная с указанного ID

Каким образом можно выбрать данные из БД путем ввода цифры, после которой будут выбираться данные

240