2012-06-08 46 views
1

我想用一個空格爆炸一個字符串,檢查該字是否已經存在。如果沒有,在mysql db中插入每行到多行。我已經試過這之前...PHP - 爆炸字符串,並插入到多行與foreach太慢

<?php 
if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    include("connect.php"); 
    $counter = 0; 
    $counters = 0; 
    $string = mysql_real_escape_string($_POST['words']); 
    $arr = explode(" ",$string); 
    foreach($arr as $str) { 
     $sql = mysql_query("SELECT * FROM unicode WHERE word = '$str'") or die (mysql_error()); 
     if (mysql_num_rows($sql) == 0) { 
      $sqli = mysql_query("INSERT INTO unicode (word) VALUES ('$str')") or die (mysql_error()); 
      $counters++; 
     } elseif (mysql_num_rows($sql) > 0) { 
      $counter++; 
     } 
    } 
    header("Location: ../addspellwords?success=457394056369&entered=$counters&duplicates=$counter"); 
} 
?> 

這是太過太緩慢....

是否有任何其他方式做到這一點?

謝謝。

+0

表'unicode'中的'word'列是唯一的嗎? –

+0

最後還有一個'}'。它的目的是? –

+0

這是服務器請求的末尾@PraveenKumar – shahbaz

回答

1

根據通過的內容,您可以去SELECT當前存在的字詞,然後將這些字詞留在INSERT之外。如果您的word列是一個關鍵字(我希望根據您的代碼),另一個選項可能是INSERT...ON DUPLICATE KEY。請嘗試以下操作:

<?php 
if($_SERVER['REQUEST_METHOD'] == 'POST') { 
    include("connect.php"); 
    $counter = 0; 
    $counters = 0; 
    $string = mysql_real_escape_string($_POST['words']); 
    $arr = explode(" ",$string); 

    $sql = mysql_query("SELECT `word` FROM unicode WHERE word IN ('".implode("', '", $arr) . ")") or die (mysql_error()); 
    $dupes = array(); 
    while($r = mysql_fetch_assoc($sql) { 
     $dupes[] = $r['word']; 
    } 
    $newwords = array_diff($arr, $dupes); 
    if(count($newwords)) { 
     $sqli = mysql_query("INSERT INTO unicode (word) VALUES ('" . implode("'),('", $newwords) . "')") or die (mysql_error()); 
    } 
    header("Location: ../addspellwords?success=457394056369&entered=".count($newwords)."&duplicates=".count($dupes)); 
} 
?> 
+0

太棒了....非常感謝... – shahbaz

+0

你甚至可以通過使用[array_unique()](http://www.php.net/manual/en/function.array-unique .php)在$ arr數組上 – h00ligan