2012-09-18 12 views
0

我有一個將用戶插入數據庫的腳本。它曾經與MYISAM一起工作,但由於我改爲INNODB,它只插入第一行,然後停止。多個插入不能與INNODB一起使用

這是腳本。它basicaly得到所有的Facebook好友,並檢查用戶是否在數據庫中。如果不是,它會創建一個新的「未註冊」用戶。由於我更改爲INNODB,因此它只插入第一個用戶。我還會發布表創建代碼。有小費嗎?

$data = explode(";", $_POST['data']); 
for($i=0; $i<count($data); $i++){ 
    $user = explode("^", $data[$i]); 
    $fname = $user[0]; 
    $lname = $user[1]; 
    $face_uid = $user[2]; 
    $birthday = $user[3]; 
    $gender = $user[4]; 

    $temp_birth = explode("/", $birthday); 
     if(count($temp_birth)!=3){ 
      $birthday="0000-00-00"; 
     } else { 
      $birthday = $temp_birth[2]."-".$temp_birth[0]."-".$temp_birth[1]; 
     } 

     if(ctype_alnum(str_replace(" ", "", $fname)) && ctype_alnum(str_replace(" ", "", $lname))){ 
      $result = mysql_query("SELECT * FROM popguest.user WHERE face_uid='$face_uid'"); 
      $row=mysql_fetch_array($result); 
      if(mysql_num_rows($result)==0){ 

       $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
       $size = strlen($chars); 
       $verify=0; 
       while($verify==0){ 
        $username=''; 
        for($j = 0; $j < 10; $j++) { 
         $username .= $chars[ rand(0, $size - 1) ]; 
        } 
        $result2 = mysql_query("SELECT * FROM popguest.user WHERE username='$username'"); 
        if(mysql_num_rows($result2)!=0){ 
         $verify=0; 
        }else{ 
         $verify=1; 
        } 
       } 

       $result = mysql_query("INSERT INTO popguest.user (face_uid, username, fname, lname, birthday, gender, registered) VALUES ('$face_uid', '$username', '$fname', '$lname', '$birthday', '$gender', '0')"); 

       echo $fname." ".$lname.";".$face_uid.";".$birthday.";".$gender."\n"; 

      } else { 

      } 
     } else { 

     } 
} 
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT, 
`username` varchar(10) COLLATE latin1_general_ci NOT NULL, 
`face_uid` varchar(15) COLLATE latin1_general_ci NOT NULL, 
`fname` varchar(25) COLLATE latin1_general_ci NOT NULL, 
`lname` varchar(25) COLLATE latin1_general_ci NOT NULL, 
`email` varchar(50) COLLATE latin1_general_ci NOT NULL, 
`gender` varchar(6) COLLATE latin1_general_ci NOT NULL, 
`birthday` date NOT NULL, 
`type` int(1) NOT NULL, 
`registered` int(1) NOT NULL, 
`phone` varchar(15) COLLATE latin1_general_ci NOT NULL, 
PRIMARY KEY (`id`), 
UNIQUE KEY `username` (`username`), 
UNIQUE KEY `face_uid` (`face_uid`), 
UNIQUE KEY `email` (`email`) 
) ENGINE=INNODB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; 
+1

第一個用戶之後會發生什麼?一個錯誤?如果是,哪一個? –

+1

您的陳述讓我注意到我有一些錯誤正在進行中。這就是爲什麼我無法解決他們中的任何一個。謝謝! –

回答

1

有一對夫婦的事情,我想看看:

  • 你不提,如果你得到一個錯誤,你的代碼是不是一個陷阱要麼做,所以我會開始在腳本中添加調試並檢查mysql錯誤,例如$ error = mysql_errno($ link),trigger_error($ error,E_USER_WARNING)。
  • 您似乎正在使用latin1整理,我不知道如果您碰巧導入用戶不屬於該字符集的用戶會發生什麼。爲此,我會一直使用utf8。如果第二個用戶有那種數據,我的第一個建議會告訴你爲什麼。
+0

我明白這一點。我遇到了拉丁字符和UTF-8的問題,這就是我選擇latin1整理的原因。我會改變它,看看是否會發生任何事情。 Ty –

+0

肯定會返回一個錯誤消息,這將使您的問題完整,順便說一句,你還需要設置你的客戶端連接適當的UTF8在PHP中。 @mysql_query('SET NAMES「UTF8」'); @mysql_query('SET COLLATION_CONNECTION = utf8_general_ci'); –

相關問題