Как хранить значения в массиве PHP как несколько записей в MySQL - PullRequest
0 голосов
/ 10 января 2019

Я создал функцию PHP для вставки данных в таблицу MySQL. Одним из значений, передаваемых в функцию, является массив. Массив содержит только уникальные значения. Когда я запускаю скрипт, он сохраняет одну запись в таблице с полем, соответствующим массиву, в котором хранятся все значения массива.

Это моя функция, которая находится в отдельном файле класса:

public function importTest($val1,$valArray,$val3){

    try {

        $stm = $this->dbSt->prepare('INSERT INTO table (val1,valArray,val3) VALUES (:val1,:valArray,:val3)');

        $stm->bindParam(':val1',$val1);
        $stm->bindParam(':valArray',$valArray);
        $stm->bindParam(':val3',$val3);

        if($stm->execute()){

            return true;
        }

    }catch (PDOException $e) {

        echo $e->getMessage();
    }


    return false;

}

Установка $test и отображение на экране в целях тестирования. Это отображает все уникальные значения в массиве, который я и ищу.

$test = implode("<br />", (array_keys($array_unique_guests)));

echo 'TEST:<br /> '.$test.' <br />';  // Displays all unique values
echo '<br /><br />';

Здесь я вызываю функцию:

$importTest = $statsDao->importTest($getSites[$x]['site_id'],$test,$updateDate);

Я использую цикл for для получения значений для $getSites, который вызывает другую функцию.

Мне нужно, чтобы все значения отображались на экране выше как $ test, чтобы они сохранялись как новые записи в таблице. Вместо этого все они добавляются в одну запись.

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

Надеюсь, это понятно. Я застрял на этом некоторое время и надеюсь, что кто-то может помочь!

Спасибо!

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Пока что я могу догадаться по названию,

 $inser = "INSERT INTO table_name(id,name,pass) VALUES";
    $valuearray = array( // the array composed of values that you have prepared
          [  
            "id"  => 1,
            "name" => "John Due",
            "pass" => "123456"
          ],
          [  
            "id"  => 2,
            "name" => "Jonathan",
            "pass" => "123456"
          ],
          [  
            "id"   => 3,
            "name" => "Jonny",
            "pass" => "123456"
          ]
    ); 
    foreach($valuearray as $val)
    {
      $inser .= "('".$val['id']."','".$val['name']."','".$val['pass']."')";
    }
    echo $inser;
0 голосов
/ 10 января 2019

Передайте массив функции, а не взорванную строку, а затем используйте цикл в функции.

public function importTest($val1,$valArray,$val3){

    try {

        $stm = $this->dbSt->prepare('INSERT INTO table (val1,valArray,val3) VALUES (:val1,:val2,:val3)');

        $stm->bindParam(':val1',$val1);
        $stm->bindParam(':val2',$val2);
        $stm->bindParam(':val3',$val3);

        foreach ($valArray as $val2) {
            $stm->execute();
        }
    }catch (PDOException $e) {
        echo $e->getMessage();
        return false;
    }
    return true;
}

Вы передаете массив напрямую с помощью:

$statsDao->importTest($getSites[$x]['site_id'], array_keys($array_unique_guests), $updateDate);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...