【问题标题】:Send array to MySql with PHP使用 PHP 将数组发送到 MySql
【发布时间】:2014-07-13 05:01:09
【问题描述】:

目前我有一个 PHP 程序,它可以从 Web URL 中获取文本数据并将其保存为数组。代码如下:

$handler = fopen('URL', 'r');

if ($handler){
    while (!feof($handler)){
        $line[] = fgets($handler);
    }
    fclose($handler);    
 }

这是数组的几行打印后的样子:

9,632,1,44,Xi1esF8,28446,26377421,DK,C,0,0,0,1,0                              
9,632,2,320,i am,34977,24706164,EvOsso,C,0,0,0,1,0                               
9,632,3,352,Darwins Immaculate Selection,17357,23463949,MONSTERS,D,0,0,0,1,0  

每一行都是一个由 $line[0]、$line[1]、$line[2] 等组成的数组。

我想把它放到 MySQL 中,这样每个 ',' 之后的每条数据都是一个新列,每个新行都是 MySQL 中的一个新行。所以 MySQL DB 有 14 列和与文件中的数据一样多的行。

我不确定如何编写 php 代码以连接到 MySQL 数据库并根据 "," 分隔符和每个数组 ($line[0], $line[1], $line[2 ]) 是 MySQL 中的一个新行。

提前感谢您的帮助!

【问题讨论】:

  • 您对哪一部分有困难?连接数据库,还是写入数据?
  • 写入数据。我可以很好地连接,但是告诉它在每个“,”之后将每个数据项放在一个新行中的语法是什么,并且每个数组都是一个新行?所以数据库中有 14 列和尽可能多的行。
  • 您需要查看explode 将文件拆分为行,然后将每行拆分为列-您也许可以使用str_getcsv() 完成所有艰苦的工作php.net/manual/en/function.str-getcsv.php跨度>
  • 然后,看看在 PDO 中使用准备好的语句;您可以使用准备好的语句将一组值直接传递给数据库,它会为您正确转义。
  • 所以我应该使用 $line 而不是使用 $line[] 因为我不能分解数组?

标签: php mysql sql arrays


【解决方案1】:

您可以轻松地内爆和分解,最后使用 for 循环将用逗号分隔的每个数据作为不同的行存储到数据库中。

首先你需要把你的数组值放到一个字符串中:

  $conn=mysql_connect("host_name","user_name","password") or error("Could not connect: ".mysql_error());
  mysql_select_db("db_name");

  $array=array("something","something","something");//this is the array you have.
  $string=implode(",",$array); // you need to implode array and store that as string.

现在您需要再次用逗号分解 $string 以将它们放入 for 循环中以存储到数据库中。

  $str=explode(',',$string);

现在您只需使用 for 循环进行查询。

  foreach($str as $strs)
  {
  $query = "INSERT INTO table_names(id, column_name)
               VALUES
               ('', '".$strs."')";
  mysql_query($query,$conn); 

  }

【讨论】:

  • $i=0 和 $i++ 是干什么用的? foreach 不是已经遍历每个数组元素了吗?
  • 对不起,在这种情况下你不需要它,只是如果你需要使用它,如果你需要它。再次抱歉
  • 我不认为代码将每个数组位置放在不同的列中?我需要每个数组位置都是它自己的列。
  • 所以在上面的9,632,1,44,Xi1esF8,28446每个数字后面的逗号都需要在自己的每一列中。
  • 我可能偶然发现了我自己问题的答案: LOAD DATA LOCAL INFILE '$myFile'" . " INTO TABLE rankfeed_temp FIELDS TERMINATED BY ','
猜你喜欢
  • 2014-04-09
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 2020-05-09
  • 2016-10-14
  • 1970-01-01
  • 2019-06-21
相关资源
最近更新 更多