我正在尝试实现一个简单的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++;
}
}
答案 0 :(得分:0)
好的,我发现了问题(具体问题):
此查询:
SELECT id FROM users WHERE first_name = :first_name AND last_name = :last_name
完全按照您的想法行事,为所有用户提供名字和姓氏。第一次使用它时,如果没有这样的用户存在,你可以添加用户和虚荣心并继续前进。
但是,如果这样的用户存在,由rowCount()
确定,则进入该循环。
该循环包含相同的查询,检查是否有任何具有该名字和姓氏的用户。但是你在这个区块中的唯一原因是因为有些用户匹配查询。
这里的一般逻辑是:
你应该做的是生成基本的虚荣,然后在表中检查 的存在,然后你可以检查你的后备,每个循环生成一个新的虚荣,直到它不存在(这实际上并不是一种很好的方法,但更好的方法需要更多重大改变)。
您的代码实际上还有很多需要改进的地方,但这不是Code Review,所以我会说清楚。