首页 \ 问答 \ 在数据库中存储数组(Storing Arrays in Database)

在数据库中存储数组(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”,最后一个是完全空白的。


Ok, I'm trying to read a csv file that the user uploads. It will have one column and many rows. Each row will have a URL in it. I have it uploaded and have the data sorted but I can't figure out how to properly extract that data and store it into the database.

EDIT

When I do a var_dump($csv) I get the following:

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

How can I store each of these URLs as a new record in a table?

EDIT #2

When using this code:

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

I get the following error:

Notice: Array to string conversion in

That is referring to my if statement above. I get 4 notices (which it should be storing 4 records with the file I'm working with so that makes sense)

It also stores 5 records to the database. The first 4 have "Array" in the url column and the last one is totally blank.


原文:https://stackoverflow.com/questions/33048686
更新时间:2021-03-14 06:03

最满意答案

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

Using mysqli, first make a secure page like:

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

相关问答

更多
  • 很好的问题。 除非你想将你的数组转换成一组标准化的表,这听起来像你没有的,你可能想要考虑序列化。 序列化是将对象转换为可以保存到磁盘或数据库的某种格式的流行语。 序列化的两种主要格式是二进制和XML,我敢打赌,Java对它有一定的支持。 根据您使用的数据类型,您应该能够将数组转换为XML或二进制数据,然后将其保存到数据库中的单个字段。 您可以通过检查http://java.sun.com/developer/technicalArticles/Programming/serialization/开始使用Ja ...
  • 使用mysqli ,首先创建一个安全的页面,如: connect.php othepage.php
  • 您可以使用ActiveRecord的serialize声明存储数组和哈希: class Comment < ActiveRecord::Base serialize :stuff end comment = Comment.new # stuff: nil comment.stuff = ['some', 'stuff', 'as array'] comment.save comment.stuff # => ['some', 'stuff', 'as array'] 您可以指定对象类型应等于的类 ...
  • 你在这里贴了很多代码,太多了,无法轻松阅读和理解。 话虽这么说,您可以采取一些方法来保存数据库中的数组。 序列化它,然后将其存储为字符串。 然后在想要读取它时反序列化它。 您可以使用json或yaml 。 单独保存数组中的数据。 这可能是一种更明智的方法,因为您不必混淆序列化。 所以,例如,如果你有一个数组fruits = ["apple", "orange"]和meats = ["beef", "lamb"] ,那么你可以在数据库中制作fruits和meats表,给它们name列,然后创建相应的条目。 Y ...
  • 我的直觉告诉我要创建一个表来保存所有这些项目 你的直觉是正确的。 1)避免过早优化 2)除非你有一个非常好的和真正的理由,否则不要违反规范化规则 3)为什么你怀疑多表方法会更快? 这是一张表中的5000万条目 所以呢? 即使您只有userid索引,与每个用户的单个表相比,性能差异也不会明显变慢(实际上,有200,000个用户,它会更快,更快 - 因为DBMS可以轻松地保持开放状态每个表的文件句柄!)。 我估计每秒最多100次修改 应该可以使用MySQL和相当基本的硬件,但如果它是我,我想要一点空间,我会选择 ...
  • 不要将XML用于如此庞大的数据结构。 由于所有值都是数字,因此您可以使用CSV( 0,1,1,0,... )或其他更紧凑的String表示。 如果数据保证始终为0和1,则还可以使用位字段。 BitSet不是很有用,因为没有String-> BitSet转换器,所以你必须自己编写。 如果您不想这样,请尝试BigInteger。 这为您提供了可以存储在数据库中的大量数字。 Don't use XML for such huge data structures. Since all values are numb ...
  • 真正的原因是正常化,你将通过这样做来打破第一个正常形态 。 但是,有很多情况下可以考虑违反正常形式。 你打交道的领域有多少?他们都是布尔人吗? 在数据库中存储序列化为字符串的数组将具有以下缺点(等等): 当您需要更新设置时,您必须首先从数据库中提取当前设置,反序列化数组,更改数组,更改数组并更新表中的数据。 在搜索时,您将无法只向数据库询问给定用户(或一组用户)是否禁用或启用了给定设置,因此您不会有任何搜索机会。 相反,您应该真的考虑使用另一个表创建另一个表,并将您需要的记录作为另一个表的一对多关系。 因此 ...
  • 我猜你有一个MySql,关系数据库。 作为第一种方法 ,您必须考虑在关系数据库 的字段中插入任何类型的组合数据 (CSV,JSON, serialize() ), 这是您应始终应避免的 。 这是我在大学学习数据库时学到的第一件事。 这是因为当您设计数据库时,您的第一个方法应该是数据库规范化 。 非规范化是在寻找性能时常用的东西。 为此,您需要在数据库(建模,访问等)方面拥有丰富的经验。 这是经验丰富的DBA和商业智能专业人士所做的事情,但如果你真的不知道自己在做什么,那么你不必尝试。 所以,你的目标是设计一 ...
  • 对象到字符串: 您可以将对象作为JSON字符串存储在DB中。 这是一个简单的例子: var foo = new Object(); foo.Name = "James"; foo.Gender = "Male"; //Result: {"Name":"James","Gender":"Male"} var stringRepresentation = window.JSON.stringify(foo); 这是一个工作小提琴 。 字符串到对象: 要将字符串转换回对象,只需调用window.JSON.pa ...
  • 在这种情况下,最好的解决方案是创建一个单独的元表,用于存储与图像相关的数据(数组)。 这是一个简单的EER示例: image_id (引用外键), array和index组合构成了元表的主键。 我假设您可以安全地将数组的键表示为0索引,并且数组的所有值也都是数字(这就是为什么所有字段都是INT类型,但如果没有,请相应地调整数据类型)。 image_id表示链接的image_id。 array表示特定的数组(您说最多3个数组,因此此列中的值将是1-3任何值)。 index是数组中的数字索引。 value是与索 ...

相关文章

更多

最新问答

更多
  • Google会更新重定向网址吗?(Does Google update redirect URLs? [closed])
  • 如何将js-variable从.js文件传递给Electron中的.html页面?(How to pass js-variable from .js file to .html page in Electron?)
  • matlab中的数据处理gui - 从文件和文本框中读取并传递给函数(data handling in matlab gui - reading from file and textbox and pass to function)
  • SVG矩形的笔划宽度在顶部/左侧被切除。(SVG rectangle's stroke widths are cut off on top/left. How do I fix this?)
  • BOOST_CHECK中的错误?(Bug in BOOST_CHECK?)
  • 使用ActiveDocument时记录替换量(Recording the amount of replacements when using ActiveDocument)
  • 将php数组转换为javascript数组(convert php array to a javascript array)
  • 在斯威夫特干邑国际象棋引擎与iOS项目集成(Stockfish Chess Engine Integration with iOS project in Swift)
  • C# - 增加一个双倍值(1.212E + 25)(C# - Incrementing a double value (1.212E+25))
  • 取消asynctask的最佳方法(Best way to cancel asynctask)
  • 文件转换问题的最佳方法(Best approach to File Conversion problems)
  • 从分组数据中选择第一行和最后一行(Select first and last row from grouped data)
  • 哪些元素可以禁用?(What elements can ng-disabled be applied to?)
  • ASP.NET GridView在回发时为空(ASP.NET GridView empty on postback)
  • lua环境和模块(lua environments and modules)
  • 如何将小切片复制到更大切片的末尾(How to copy a small slice to the end of a bigger slice)
  • IIS7 URL重写模块替换(IIS7 URL Rewriting Module Replace)
  • IE和Google Chrome中的多表单提交(Multi-forms submission in IE and Google chrome)
  • Symfony2:如何在控制器中检索UserChecker?(Symfony2: How to retrieve the UserChecker in a controller?)
  • 循环通过数组和删除项目,而不破坏循环(Looping through array and removing items, without breaking for loop)
  • 如何动态更改YouTube播放器的选项(How to dynamically change YouTube player's options)
  • Laravel使用以点开头的文件处理存储磁盘(Laravel working through storage disk with files starting with dot)
  • 在挂架中使用重定向时出错(Error using redirect in pylons)
  • 替换netCDF文件中的变量(Replacing a variable inside a netCDF file)
  • 让swable中的非可变数组(let Non-mutable array in swift)
  • 春季安全缺省登录页面代码位于何处?(Where is spring security default login page code located?)
  • Unix - 并排打印公共线(Unix - Print Common Lines side by side)
  • 验证TimeSpan(Validating TimeSpan)
  • 如果还有一个具有返回值的重载版本,如何正确调用非返回值Swift函数?(How do I properly call a non-return-value Swift function when it also has an overloading version that has returned value?)
  • Perl:比较两个文件并打印匹配和不匹配的数据(Perl: Comparing two files and printing data that match and don't match)