2012-07-24 15 views
0

我想實現一個簡單的MySQL插入,該用戶的名字($ first_name)和用戶的姓氏($姓氏),並插入到我的用戶表(url)列。這與Quora和Facebook非常相似......例如,www.facebook.com/Michael.Jackson.32。虛度網址,而循環與PDO選擇並插入不正常

我的while循環在下面,我希望我知道錯誤,但是當我執行代碼時,我的服務器只是繼續前進,並最終超時。

任何幫助,非常感謝。

//Store Vanity URL 
$user_id_sql = $db->prepare("SELECT id FROM users WHERE first_name = :first_name AND last_name = :last_name"); 
$user_id_sql->execute(array(':first_name' => $first_name , ':last_name' => $last_name)); 
$user_search_results = $user_id_sql->rowCount(); 

if($user_search_results == "0") { 
    $vanity = $first_name.'.'.$last_name; 
    $insert_vanity_url = $db->prepare("INSERT INTO users (url) VALUES (:vanity) WHERE uid = :uid"); 
    $insert_vanity_url->execute(array(':vanity'=>$vanity , ':uid'=>$uid)); 
} 
else { 
    $var1 = "bad"; 
    $i = "1"; 
    while($var1 == "bad") { 
     $user_id_sql_two = $db->prepare("SELECT id FROM users WHERE first_name = :first_name AND last_name = :last_name"); 
     $user_id_sql_two->execute(array(':first_name' => $first_name , ':last_name' => $last_name)); 
     $user_search_results_two = $user_id_sql_two->rowCount(); 
     if($user_search_results_two == "0") { 
      $vanity = $first_name.'.'.$last_name.$i;] 
      $insert_vanity_url = $db->prepare("INSERT INTO users (url) VALUES (:vanity) WHERE uid = :uid"); 
      $insert_vanity_url->execute(array(':vanity'=>$vanity, ':uid'=>$uid)); 
      $var1 = "good"; 
     } 
     $i++; 
    } 
} 
+0

爲了將來的參考,你能確保你的代碼格式化嗎?我已經提交了一個編輯,所以這一個會好的。 – Aatch 2012-07-24 03:11:04

+0

哦,我的壞,不知道我應該像這樣格式化。 – user1011713 2012-07-24 03:18:40

回答

0

好吧,我發現這個問題(以及特定的問題):

這個查詢:

SELECT id FROM users WHERE first_name = :first_name AND last_name = :last_name 

不正是你想象的那樣,得到所有與第一用戶和姓。第一次使用它時,如果沒有像這樣的用戶存在,則添加用戶和虛榮心並繼續前進。

但是,如果這樣的用戶確實存在,如rowCount()所確定的那樣,則進入該循環。

該循環包含相同的查詢,檢查是否有任何用戶名和姓。但是你在這個塊中的唯一原因是有用戶匹配查詢。這裏

一般的邏輯是:

  1. 如果這樣的用戶不存在,創建它們。
  2. 如果這樣的用戶存在,循環直到它不再存在。

什麼,你可能應該做的是產生基本的虛榮心,然後檢查其存在在表中,那麼您可以檢查備用的,產生了新的虛榮心每個循環,直到它不存在(此實際上並不是這樣做的好方法,但更好的方法是需要更重要的改變)。

實際上還有很多需要改進的代碼,但這不是Code Review,所以我會堅持自己的口氣。

+0

問題實際上是插入而不是更新語句。 – user1011713 2012-07-24 04:51:10

+0

你確定嗎?其實嘗試你發佈的代碼。肯定有一個無限循環,因爲除了條件內部(因爲前面提到的缺少變化你永遠不會得到),你不會對基於$ i的任何變量進行任何修改。 – Aatch 2012-07-24 04:53:46

+0

是的,忘了提到這一點。我接受了你的建議並首先創建了虛榮URL,然後在更新語句之前搜索它。然後,如果它已經存在於數據庫中,則將$ i添加到它。 – user1011713 2012-07-24 04:56:07