在数据库中存储数组


Storing Arrays in Database

好的,我正在尝试读取用户上传的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个在url列中有"Array",最后一个完全空白。

使用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();
?>

假设您正在使用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将自动分配它。

使用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

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

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

输出:

: 3:{0;有:1:{我:0;销售:22:"http://www.example.com";}我:1;答:1:{我:0;销售:23:"http://www.example2.com";}我:2;答:1:{我:0;销售:23:"http://www.example3.com";}}

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

 $Unser = unserialize($unserializedArray);

so running:

$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]=>数组([0]=> http://www.example.com)[1] =>阵列([0] => http://www.example2.com)[2] =>数组([0]=>http://www.example3.com))