当前位置: 首页 > 知识库问答 >
问题:

使用PDO循环时的虚荣URL选择和插入不能正常工作

端木飞
2023-03-14

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

我的虽然循环在下面,我希望我知道错误,但当我执行代码时,我的服务器只是继续运行,最终超时。

任何帮助都非常感谢。

//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个答案

金毅
2023-03-14

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

此查询:

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

完全按照你的想法去做,获取所有拥有这个名字和姓氏的用户。第一次使用时,如果没有这样的用户存在,你就添加用户和虚荣心,然后继续前进。

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

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

这里的一般逻辑是:

  1. 如果这样的用户不存在,请创建它们

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

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

 类似资料:
  • 问题内容: 我在使用PDO将多个记录插入数据库时​​遇到麻烦。我可以成功添加一条记录,但是一旦添加循环,它就会失败。在阅读了与此相关的许多其他SO问题之后,我相信我需要“绑定”我的变量,尽管我对正确的语法完全感到困惑。 这是我创建的原始函数: 在类似于此: 更新: 对于那些感兴趣的,这是我修复错误后的最终功能: 问题答案: 您不需要绑定变量。香港专业教育学院以前用类似的代码做到这一点。很难说出什么

  • 我是javafx的新手,所以请原谅我的愚蠢错误,我使用javafx创建了一个注册fxml,但是当我试图存储数据时,它总是会把它扔到我的modelcontroller的catch块中,在那里我有一个sql的insert查询 这是我的modelcontroller将我的注册数据插入数据库 它总是抛出modelContoller中的catch块,我通过调试器检查过它

  • 我有一个非常恼人的问题,我已经在网上阅读了所有现有的文档,并阅读了所有与此主题相关的问题和答案,但根本无法使其发挥作用! 我真的很绝望,我不知道我错过了什么,所以我会努力给你我所拥有的一切。基本上,我试图做的是用一个查询保存大量数据,而不是每个对象的多个查询。你可以怀疑我正在使用Spring Boot, Hibernate和MySql。 因此,根据我读到的与“使用mysql hibernate进行

  • 我对c不熟悉,我正试图解决Bjarne Stroustrup的书《编程原则和实践使用C》第四章中的练习6,但不明白为什么我的代码不起作用。 演习: 制作一个保持十个字符串值“零”、“一”、......、“九”的向量。在将一个数字转换为相应的拼写值的程序中使用它:例如,输入7给出输出7。有相同的程序,使用相同的输入回路,将拼写出来的数字转换成它们的数字形式;例如,输入7给出输出7。 我的循环只对一个

  • 我正在编写一个程序,用户输入一个班级中的学生人数、该班级参加的考试次数,然后输入每个学生的姓名和考试分数。然后,程序计算学生的成绩,并分配给他们一个相应的字母等级。然后最后,它将他们的分数添加到一个classSum,计算平均类分数并显示出来。 这就是我目前所拥有的:public class GradeCalculator{ 这是我得到的输出: 正如您所看到的,在第一个学生之后,输入姓名和考试分数并

  • 我有一个简单的Do-While循环,它使用的扫描器功能不正常。代码应该显示一个文本,提示用户输入字符串,用户输入字符串,然后程序再次显示相同的文本,并提示用户输入另一个字符串。 程序所做的是显示正确的消息,用户输入一个字符串,然后提示用户输入一个字符串,但用户输入之前没有文本。用户输入文本后,它就会正常工作。 查看我的代码,我看不出程序有任何理由在不向用户显示文本的情况下提示用户两次输入。