Я пытаюсь ВСТАВИТЬ 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++)
я получаю таблицу только с последней до последней записи
Что вызывает это и как я могу это исправить?
Вы не выполняете свою строку sql внутри цикла for.
Каждый раз, когда вы пишете $ sql = ""; , он перезаписывает предыдущее объявление.
Если вы затем запустите запрос ПОСЛЕ цикла, он, естественно, сможет только запустить его в одной записи.
Решения: либо запускать запрос внутри цикла for, либо добавлять запросы друг к другу с помощью $ sql. = ""; (Обратите внимание на полный цикл/период. Вам также необходимо убедиться, что у вас есть точка с запятой внутри указанной строки sql, которую вы сейчас делаете).
В любом случае, вам также следует избегать строк sql и просматривать подготовленные инструкции, чтобы ваша база данных была менее уязвимой для SQL-инъекции.
$sql
ВНУТРИ вашего цикла, поэтому вы должны выполнять его ВНЕ цикла, что означает, что вы получите только LAST$sql
вы произвели.