使用php将字符串插入postgreSQL表

使用php将字符串插入postgreSQL表,php,postgresql,Php,Postgresql,我试图用这个方法将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_e

我试图用这个方法将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]');
    ";
    }
它似乎覆盖了我的所有其他条目,因为当我尝试($I=0;$I<$arrlength-1;$I++)时,我得到的表中只有倒数第二个条目


这是什么原因造成的?我如何修复它?

您没有在for循环中执行sql字符串

每次你写$sql=“”,它将覆盖以前的声明

如果在循环之后运行查询,那么它自然只能在一个条目上运行查询

解决方案:在for循环中运行查询,或者使用$sql将查询相互追加(请注意句号/句号。您还需要确保在引用的sql字符串中有分号,这是您当前所做的)


无论哪种方式,您都应该转义sql字符串并查看准备好的语句,这样您的数据库就不容易受到sql注入的攻击。

您不会在for循环中执行sql字符串

每次你写$sql=“”,它将覆盖以前的声明

如果在循环之后运行查询,那么它自然只能在一个条目上运行查询

解决方案:在for循环中运行查询,或者使用$sql将查询相互追加(请注意句号/句号。您还需要确保在引用的sql字符串中有分号,这是您当前所做的)


无论哪种方式,您都应该转义sql字符串并查看准备好的语句,这样您的数据库就不那么容易受到sql注入的影响。

您不是在循环内执行
$sql
,所以您必须在循环外执行它,这意味着您只能获得最后生成的
$sql
。您没有在循环内执行
$sql
,因此必须在循环外执行,这意味着您只能获得最后生成的
$sql
                          link_ar                          |  artist_name   | popularity 
-----------------------------------------------------------+----------------+------------

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