在数据库中存储数组

时间:2015-10-09 23:46:47

标签: php

好的,我正在尝试读取用户上传的csv文件。它将有一列和多行。每行都有一个URL。我已将其上传并对数据进行了排序,但我无法弄清楚如何正确提取数据并将其存储到数据库中。

修改

当我执行var_dump($csv)时,我得到以下内容:

array (size=5)
  0 => 
    array (size=1)
      0 => string 'http://example.com' (length=18)
  1 => 
    array (size=1)
      0 => string 'http://example2.com' (length=19)
  2 => 
    array (size=1)
      0 => string 'http://example3.com' (length=19)
  3 => 
    array (size=1)
      0 => string 'http://example4.com' (length=19)
  4 => boolean false

如何将每个URL存储为表中的新记录?

编辑#2

使用此代码时:

   foreach($csv as $v) {
      if($con->query("INSERT INTO table_name (url) VALUES('$v')")) {
      }
      else{
        // connection failure
      }
    }

我收到以下错误:

注意:

中的数组到字符串转换

这是指我上面的if语句。我收到4条通知(它应该存储4条记录,其中包含我正在使用的文件,这样才有意义)

它还将5条记录存储到数据库中。前4个有#34;数组"在url列中,最后一个是完全空白的。

4 个答案:

答案 0 :(得分:1)

假设您正在使用PDO(它与mysqli类似,但您使用bind_param代替bindParam):

$stmt = $pdo->prepare("INSERT INTO tableName (url) VALUES (:url)");
$stmt->bindParam(':url', $url);
foreach ($csv as $row) {
    $url = $row[0];
    $stmt->execute();
}

我认为id是一个自动增量字段,因此将其从INSERT中删除会自动分配。

答案 1 :(得分:1)

使用mysqli,首先制作一个安全页面,如:

<强> connect.php

<?php  // change the Strings in quotes below
function db(){
  return new mysqli('host', 'username', 'password', 'database');
}
?>

<强> othepage.php

<?php
include 'connect.php'; $db = db(); $csv = readCSV($csvFile);
foreach($csv as $a){
  foreach($a as $v){
    if($db->query("INSERT `url_table_name` (`url_column_name`) VALUES('$v')"){
    }
    else{
      // connection failure
    }
  }
}
$db->close();
?>

答案 2 :(得分:0)

使用for();foreach();循环遍历数组并获取数据。然后在循环内查询数据库。

<?php
$arr = [
    0 => [
        0 => "http://example.com"
    ],

    1 => [
        0 => "http://example2.com"
    ]
];

for ($i = 0; $i < count($arr); $i++) {
    foreach ($arr[$i] as $key => $value) {
        echo $key . " => " . $value . "<br>";
    }
}
?>

<强>输出

0 => http://example.com 0 => http://example2.com

答案 3 :(得分:0)

如果您需要数组完整而不对数组进行排序并将每个元素保存到其自己的行中的数据库中。您最好的解决方案是:

$Array = array(
    0 => array ("http://www.example.com"),
    1 => array ("http://www.example2.com"),
    2 => array ("http://www.example3.com")  
);

echo serialize($Array);

哪个会输出:

  

一个:3:{I:0;一个:1:I {:0; S:22: “http://www.example.com”;} I:1;一个:1:{I:0; S:23 : “http://www.example2.com”;} I:2;一个:1:{I 0,S:23: “http://www.example3.com”;}}

此字符串可以保存到数据库中的单个行中,并通过简单的选择查询检索并执行:

 $Unser = unserialize($unserializedArray);

所以跑步:

$Array = array(
    0 => array ("http://www.example.com"),
    1 => array ("http://www.example2.com"),
    2 => array ("http://www.example3.com")  
);

$Ser = serialize($Array);

print_r(unserialize($Ser));

将输出:

  

数组([0] =&gt;数组([0] =&gt; http://www.example.com)[1] =&gt;数组(   [0] =&gt; http://www.example2.com)[2] =&gt;数组([0] =&gt;   http://www.example3.com))