0

我正在尝试实现一个简单的 mysql 插入,它采用用户的名字 ($first_name) 和用户的姓氏 ($last_name) 并将它们插入到我的用户表 (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++;
    }
}
4

1 回答 1

0

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

这个查询:

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

完全按照您的想法进行操作,获取具有该名字和姓氏的所有用户。第一次使用时,如果不存在这样的用户,则添加用户和虚荣,然后继续。

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

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

这里的一般逻辑是:

  1. 如果这样的用户不存在,请创建它们。
  2. 如果这样的用户确实存在,则循环直到它不再存在。

你可能应该做的是生成基本的虚荣,然后检查在表中的存在,然后你可以检查你的后备虚荣,每个循环生成一个新的虚荣,直到它不存在(这实际上不是一个好的方法这样做,但更好的是需要更重大的改变)。

实际上,您的代码还有很多需要改进的地方,但这不是代码审查,所以我会保持沉默。

于 2012-07-24T03:23:38.110 回答