使用PDO循环时的虚荣URL选择并插入不正常

时间:2012-07-24 03:05:51

标签: php mysql while-loop

我正在尝试实现一个简单的mysql插入,它使用用户的名字($ first_name)和用户的姓氏($ last_name)并将它们插入到我的users表(url)列中。这非常像Quora和Facebook ......例如www.facebook.com/Michael.Jackson.32。

我的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++;
    }
}

1 个答案:

答案 0 :(得分:0)

好的,我发现了问题(具体问题):

此查询:

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

完全按照您的想法行事,为所有用户提供名字和姓氏。第一次使用它时,如果没有这样的用户存在,你可以添加用户和虚荣心并继续前进。

但是,如果这样的用户存在,由rowCount()确定,则进入该循环。

该循环包含相同的查询,检查是否有任何具有该名字和姓氏的用户。但是你在这个区块中的唯一原因是因为有些用户匹配查询。

这里的一般逻辑是:

  1. 如果此类用户不存在,请创建它们。
  2. 如果这样的用户存在,则循环直到它不再存在。
  3. 你应该做的是生成基本的虚荣,然后在表中检查 的存在,然后你可以检查你的后备,每个循环生成一个新的虚荣,直到它不存在(这实际上并不是一种很好的方法,但更好的方法需要更多重大改变)。

    您的代码实际上还有很多需要改进的地方,但这不是Code Review,所以我会说清楚。