Insert into в цикле pdo

164
24 января 2019, 06:30

Пытаюсь в цикле занести данные в бд. То есть я отправляю запрос в цикле.Но у меня почему-то добавляется лишь одна строка.

for($i = 0; $i < count($arr); $i++) {
    if ($arr[$i]['sex'] == 1) {
        $DBObj->query("INSERT INTO `users_vk` SET id_users = ?, first_name = ?, last_name = ?, sex = ?, bdate = ?, city_id = ?, city_name = ?, country_id = ?, country_name = ?, online = ?, home_phone = ?, status = ?, last_seen = ?, platform = ?, domain = ?, email = ?, photo_id = ?, langs = ?, relations = ?", [$arr[$i]['id'], $arr[$i]['first_name'], $arr[$i]['last_name'], $arr[$i]['sex'], $arr[$i]['bdate'], $arr[$i]['city']['id'], $arr[$i]['city']['title'], $arr[$i]['country']['id'], $arr[$i]['country']['title'], $arr[$i]['online'], $arr[$i]['home_phone'], $arr[$i]['status'], $arr[$i]['last_seen']['time'], $arr[$i]['last_seen']['platform'], $arr[$i]['domain'], 'none', 'none', 'none', $arr[$i]['relation']], ['insert']);
    }else continue;
}

Основной класс для работы с бд,упростил его и многие методы удалил,так как тут они мне не нужны,так как это одно страничный сайт

 <?php
 class DB
 {
 //База Данных - БД
 private $host; 
 private $user;
 private $password; //Пароль от БД
 private $dbname; //Имя БД
 private $sq;
 private $pdo;
 private $ex;
protected function __construct($host, $user, $password, $dbname, $sq)
{
    $this->host = $host;
    $this->user = $user;
    $this->password = $password;
    $this->dbname = $dbname;
    $this->sq = $sq;
    try {
    $this->pdo = new PDO("mysql:host={$host};dbname={$dbname}", $user, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
    $this->pdo->exec("SET NAMES utf8");
    }catch (PDOException $e) {
        echo "невозможно установить соединение с базой данных <br />";
    }
}
public function getSQ()
 {
    return $this->sq;
 }
 private function preparePDO(string $query) //Подготовка запроса
 {
    $this->ex = $this->pdo->prepare($query);
    // echo "\nPDO::errorInfo():\n";
//    print_r($this->pdo->errorInfo());
 }
 private function executePDO(array $array, string $string, array $action) //Замена вопрос на данные
 {
    switch ($action[0]) {
        case 'select':
            if($this->StringKeys($array)) {
                $this->ex->execute($array);
                if ($string == 1) {
                $result = $this->ex->fetchAll(PDO::FETCH_ASSOC);
                }
                // print($this->ex->debugDumpParams());
            }else{
                if(count($array) == 0) {
                    $this->ex->execute();
                    $result = $this->ex->fetchAll(PDO::FETCH_ASSOC);
                }
            }
            return $result;
            break;
        case 'insert':
            $this->ex->execute($array);
            // print($this->ex->debugDumpParams());
            break;
        default:
            # code...
            break;
    }
 }
 protected function customQuery(string $query, array $data = [], array $action = []) //Юзерский запрос,тут он может написать любой запрос
 {
    if(!is_array($data)) return false;
    $this->preparePDO($query);
    return($this->executePDO($data, 1, $action));
 }
 private function stringWhere($array) 
 {
    $field = "`".implode('`, `', $array)."`";
    return $field;
 }
 private function StringKeys(array $array) //Проверяет,массив ассоциативный или обычный
 {
    $arr = array_keys($array);
    if (is_numeric($arr[0])) return true;
    else return false;
 }
 protected function __destruct()
 {
    if($this->pdo) $this->pdo = null;
 }

} ?>

еще один класс

<?php
class DBObj extends DB
{
public function __construct($host, $user, $password, $dbname, $sq = '?')
{
    parent::__construct($host, $user, $password, $dbname, $sq);
}
 public function query(string $query, array $data = [], array $action = [])
 {
    $rezult = $this->customQuery($query, $data, $action);
    return $rezult;
 }
 public function __destruct()
 {
    parent::__destruct();
 }
 }
READ ALSO
Как в yii2 наиболее быстро получить выборку 100 записей с пагинацией?

Как в yii2 наиболее быстро получить выборку 100 записей с пагинацией?

В БД есть болеее 5 000 000 записейИнформации в них не много - фильтрация идёт по одному полю, которое является индексом

168
Как добавить class = &ldquo;active&rdquo; к активному элементу меню

Как добавить class = “active” к активному элементу меню

В шаблоне есть код для меню, которое берется из БД

144
Как ждать сообщение от пользователя telegram bot

Как ждать сообщение от пользователя telegram bot

Подскажите пожалуйста, есть telegram botЕсть условие, если клиент написал "Привет" бот скидывает клиенту сообщения "Напишите ваше имя"

146
PHP не создает базу SQLite

PHP не создает базу SQLite

Установлен PHP 71, echo phpinfo() сообщает о подключенном драйвере SQLite

175