2013-03-22 46 views
0

我试图将关联的PHP数组(表)存储到数据库中。这是一个包含许多字段(大约30个字段)的大数组,并且我只想存储6个这个数组的字段放在一个有6个字段的表中。此数组上的每一行都包含特定文章的信息。我想确保每篇文章只存储一次(不重复),因此在存储数据之前我需要检查数据库是否存在重复查询。这是我的代码无法正常工作。如果有人帮助我,我将不胜感激。将关联的PHP数组存储到数据库中而不重复

<?php $results = $PubMedAPI->query($term, false); ?> 
<?php if (!empty($results)): ?> 
<?php 
    $con=mysqli_connect("localhost","root","","db"); 
    // Check connection 
    if (mysqli_connect_errno()) 
    { 
     echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 
    foreach ($results as $result): 

     $pmid = $result['pmid']; 
     $title = $result['title']; 
     $authors = $result['authors']; 
     $journalabbrev = $result['journalabbrev']; 
     $year = $result['year']; 
     $abstract = $result['abstract']; 
     $fetched_articles = mysqli_query($con,"SELECT pmid FROM articles"); 

     while(($row = mysqli_fetch_array($fetched_articles))) { 
      if ($row['pmid'] == $pmid) { 
       echo "This record has already been stored into the database!"; 
      } else { 
       mysqli_query($con,"INSERT INTO articles (pmid, title, authors, journalabbrev, year, abstract) 
       VALUES ('$pmid', '$title', '$authors', '$journalabbrev', '$year', '$abstract')"); 
       echo "This record has been stored into the database!"; 
      } 
     } 
    endforeach; 
    mysqli_close($con); 
?> 
<?php endif; ?> 
+0

请问你的阵列是什么样子?请编辑您的问题并添加阵列 – michi 2013-03-22 23:37:19

回答

0

下面是一些未经测试的代码做得更快:

$select = "SELECT pmid FROM articles WHERE pmid IN ("; 
foreach($result in $results) { 
    $select .= $result['pmid'] . ','; 
} 
$select = trim($select,',') . ")"; 


$existing_pmid = array(); 
while(($row = mysqli_fetch_array($select))) { 
    $existing_pmid[$row['pmid']] = 1; 
} 

foreach ($results as $result) { 
    if(isset($existing_pmid[$result['pmid']])) { 
     echo "This record has already been stored into the database!"; 
     continue; 
    } 

    $pmid = $result['pmid']; 
    $title = $result['title']; 
    $authors = $result['authors']; 
    $journalabbrev = $result['journalabbrev']; 
    $year = $result['year']; 
    $abstract = $result['abstract']; 

    mysqli_query($con,"INSERT INTO articles (pmid, title, authors, journalabbrev, year, abstract) VALUES ('$pmid', '$title', '$authors', '$journalabbrev', '$year', '$abstract')"); 
    echo "This record has been stored into the database!"; 
} 
+0

谢谢。这非常有用! – user1811758 2013-03-23 19:01:43

相关问题