Вставка строки в таблицу postgreSQL с помощью php

1

Я пытаюсь ВСТАВИТЬ 3 отдельных переменных из массива php в таблицу postgreSQL с помощью этого метода

    $raw = fread($file,filesize("artists.txt"));
    $array_enters = (explode("\n",$raw));
    $arrlength = count($array_enters);

    for($i = 0; $i < $arrlength; $i++) {
    $arr_line = (explode("|",$array_enters[$i]));

    $sql ="
    INSERT INTO Artists (artist_name,popularity,link_ar) VALUES('$arr_line[0]','$arr_line[1]','$arr_line[2]');
    ";
    }

Тем не менее, я получаю таблицу, заполненную только последней записью моего файла

                          link_ar                          |  artist_name   | popularity 
-----------------------------------------------------------+----------------+------------

 https://api.spotify.com/v1/artists/6sq7prp0tj9Abn89khmfja | Dead Can Dance |         51
(1 row)

Кажется, он перезаписывает все мои другие записи, потому что, когда я пытаюсь for($i = 0; $i < $arrlength - 1; $i++) я получаю таблицу только с последней до последней записи

Что вызывает это и как я могу это исправить?

  • 0
    вы не выполняете $sql ВНУТРИ вашего цикла, поэтому вы должны выполнять его ВНЕ цикла, что означает, что вы получите только LAST $sql вы произвели.
Теги:

1 ответ

0
Лучший ответ

Вы не выполняете свою строку sql внутри цикла for.

Каждый раз, когда вы пишете $ sql = ""; , он перезаписывает предыдущее объявление.

Если вы затем запустите запрос ПОСЛЕ цикла, он, естественно, сможет только запустить его в одной записи.

Решения: либо запускать запрос внутри цикла for, либо добавлять запросы друг к другу с помощью $ sql. = ""; (Обратите внимание на полный цикл/период. Вам также необходимо убедиться, что у вас есть точка с запятой внутри указанной строки sql, которую вы сейчас делаете).

В любом случае, вам также следует избегать строк sql и просматривать подготовленные инструкции, чтобы ваша база данных была менее уязвимой для SQL-инъекции.

Ещё вопросы

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