2013-07-13 30 views
0

我有什么:把含有多个阵列阵列分成MySQL表

用30个键的阵列,一些键仅包含一个值,而其他含有几个(一个键包含28个值)。所以首先我不知道这是否会起作用。但我尝试过使用其他例子,我在这里找到的只是出现null。

说像这样

'name' => somemovie 
cast => person1, person2, person3, person4, person5, person6 
poster => poster1, poster2, poster3 
year => someyear 

等等等等

我的问题是:是否有可能把这些在一个MySQL表如果又如何?我使用PHP 5.3。

这是我有的代码,以及我在几年前使用的下半部分,它是一个简单的数组,它工作正常。不再那么多了。

$imdb = new Imdb(); 
$movieArray = $imdb->getMovieInfo("$cat"); 
    extract ($movieArray); 
$mysqli = new mysqli("localhost", "custom_xxxx", "xxxxxxxxxx", "custom_xxxx"); 
if ($mysqli->connect_errno) { 
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
} 
echo $mysqli->host_info . "\n"; 
$result = mysqli_insert_array("imdb", $movieArray); 

if($result['mysqli_error']) { 
    echo "Query Failed: " . $result['mysqli_error']; 
} else { 
    echo "Query Succeeded! <br />"; 
    echo "<pre>"; 
    print_r($result); 
    echo "</pre>"; 
} 

?> 
+0

您正在使用哪种应用程序级别的语言?您可以从下列表格开始:电影(movie_id,year),演员(actor_id,名称,dob),海报(poster_id,movie_id)以及将演员电影关联的表格(movie_id,actor_id,billing)。 – Strawberry

+0

感谢您对草莓的回复,即时通讯使用php5.3 mysqli/mysql,那么您是说要使用两张表?我有这个信息加载到一个数组,$ movieInfo(),老实说,我不知道如何去写甚至写一个关键值对。 mysql_insert_array我相信是弃用的,我以前使用过。我认为pdo和准备好的陈述是现在完成的方式。我所需要的只是一个示例代码片段,我可以将其余部分计算出来。谢谢你的时间! –

+0

不,我说的是使用四张桌子。只需构造一个循环来解析数组。我不是php编码器,但必须有十亿个例子 - 使用PDO和mysqli方法。 – Strawberry

回答

0

可以使用序列化功能,但我会建议反对。创建具有以下的列三个表这将取决于您的数据模型,但它会是这样的:

  • movies(movie_id,一年,poster_id,actor_id) - 存储电影在这里
  • actors(actor_id,名称, dob) - 在这里存储演员信息。
  • posters(movie_id) - 在此处存储海报信息。

现在,用于数据录入数据库。您需要类似:

$imdb = new Imdb(); 
$movieArray = $imdb->getMovieInfo("$cat"); 
    extract ($movieArray); 
$mysqli = new mysqli("localhost", "custom_xxxx", "xxxxxxxxxx", "custom_xxxx"); 
if ($mysqli->connect_errno) { 
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
} 
echo $mysqli->host_info . "\n"; 
//the following code assumes $movieArray like this: 
// $movieArray = Array(
//'name' => somemovie, 
//'cast' => array(person1, person2, person3, person4, person5, person6) 
//'poster' => array(poster1, poster2, poster3) 
//'year' => someyear) 
foreach($movieArray as $row){ 
      foreach($row['cast'] as $name){ 
        mysqli_query("INSERT INTO actor values($name['name'], $name['dob'])"); 
      } 
      foreach($row['poster'] as $name){ 
      //insert into poster table 
      } 

      //add foreach loop for each table. 
} 
if($result['mysqli_error']) { 
    echo "Query Failed: " . $result['mysqli_error']; 
} else { 
    echo "Query Succeeded! <br />"; 
    echo "<pre>"; 
    print_r($result); 
    echo "</pre>"; 
} 

这是不是因为你没有表现出阵列结构,但我想你会得到的想法实际代码。基本上,对于多维数组,您需要使用foreach循环&使用insert语句将数据插入到数据库表中。

对于检索,您将需要使用SELECT声明。最后,如果您没有暴露于SQL &数据库,请检查SQL Introduction

+0

gaurish谢谢,这使我理解这些方法变得更容易。这就是我所需要的。 –

0

如果你只是想将数组作为对象存储并且不想对它运行sql查询而不是序列化对象并将其另存为二进制mysql。

系列化:http://php.net/manual/de/arrayobject.serialize.php

的MySQL二进制:http://dev.mysql.com/doc/refman/5.1/de/binary-varbinary.html

+0

如果我序列化可以将它拉回到相同的数组?即时通讯抱歉,如此密集,我没有做太多的SQL,我主要只是将我的东西保存到变量和数组中,然后使用它,但每次抓取信息的执行时间大约是10-15秒,即时通讯看起来不运行该脚本除了一次获取数据。 –

+0

是的!这是序列化的主要焦点:将对象表示为用于保存或传输的二进制数据,并将其恢复到旧状态的同一对象。 – hasan