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

如何从MySQL/Knexjs中提取重复输入错误(1062)的关键字

向俊贤
2023-03-14

我通过从html表单发送值来测试我的数据库。独特的插入是好的,连接是好的。我的问题是,当我故意发送一个重复的(用户名)时--再次出于测试目的,我会得到一条错误消息。太完美了!

    null

明确地说,我的目标是将密钥'username'发送回客户机表单,以表明他的用户名已被使用。我将不得不做同样的电子邮件稍后也,因此我想要钥匙。

编辑:我认为我必须使用带有GET诊断的存储过程。与本文类似。

共有1个答案

杜翰林
2023-03-14

所以这(我认为)是丑陋的。但是我有的解决方案,它起作用了!我创建了一个存储过程(在mysql中),包括GET DIAGNOSTICS命令。

    DELIMITER //

    DROP PROCEDURE IF EXISTS `insert_new_user` //
    CREATE PROCEDURE `insert_new_user` (uname VARCHAR(45), pass CHAR(96), r varchar(15))
    BEGIN
        /**
        Return field that has triggered the error, otherwise, return good
        **/
     -- Declare variables to hold diagnostics area information
      DECLARE code CHAR(5) DEFAULT '00000';
      DECLARE msg TEXT;
      DECLARE rows INT;
      DECLARE result TEXT;
      -- Declare exception handler for failed insert
      DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
        BEGIN
          GET DIAGNOSTICS CONDITION 1
            code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;
        END;

      -- Perform the insert
      INSERT INTO Users(username, password, role) VALUES (uname, pass,  'full');

      -- Check whether the insert was successful
      IF code = '00000' THEN
        GET DIAGNOSTICS rows = ROW_COUNT;
        SET result = CONCAT('insert succeeded, row count = ',rows);
      ELSE
        SET result = CONCAT('insert failed, error = ',code,', message = ',msg);
      END IF;
      -- Say what happened
    SELECT result;

    END //

顺便说一句,我确实根据需要复制和修改了代码--我希望我记得这个网站...

然后在我的express服务器中,我写了一个knex.raw(...)声明。而在

.then(result => { ... })

为了参考起见,这里是发生错误1062时的控制台输出

---控制台输出---1062错误

ERR_STR:[[[{“结果”:“插入失败,错误=23000,消息=键'username'的重复项'leerman2'”}],{“fieldcount”:0,“affectedrows”:0,“insertid”:0,“info”:“”,“serverstatus”:2,“warningstatus”:0}],[[{“_b...继续

下面是键提取的代码:

    function getError(err) {
        const ERR_str = JSON.stringify(err);
        console.log(`Entered getError() function...proceeding to exctract error...`);

        console.log(`ERR_str: ${ERR_str}`);
        console.log(`Error is string. [typeOf(ERR_str)]: ${typeof(ERR_str)}. (Attempting to exctract key...`);
        const START = (ERR_str.indexOf('key')) + 'key'.length + 2; // 2 including spaces 
        console.log(`Start: ${START}`);
        const END = ERR_str.indexOf(`'"}`);
        console.log(`End: ${END}`);    
        const KEY = ERR_str.substr(START, END - START);
        console.log(`key to return to server: ${KEY}`);

        return KEY || 0;
    }

不是最干净的代码,但一个良好的开端。我现在可以把它发送给Angular并按计划使用它。如果有人看到这种方法有什么问题,请随时让我知道。

 类似资料:
  • 问题内容: SQL查询: MySQL说: 即使在行1062处没有条目,它也会显示此重复的条目错误。(ID是主键,并且是unique(ID_Category,Keyword))。你能帮我吗?… 问题答案: 您的数据库中已经有一行带有值“ 18”和“免费邮件”的行。由于存在唯一性约束,因此不能有两个这样的行。您有一些选择: 删除原始行,然后再次尝试插入:。 删除唯一性约束以允许两行同时存在。 使用忽略

  • 问题内容: 我在MySQL 5.5.24中有下表 它具有大量数据,并且其他两个表具有和并具有多对一关系。 现在,我需要更改结构并在表中引入单独的主键,同时仍保留现有的关系和数据。为此,我执行了以下查询: 不幸的是,我的第二次查询失败,并出现以下错误: 1062-键“ PRIMARY”的条目“ 0”重复 有人可以指出这个问题吗?我想问题是现有的关系,但是我不想丢失具有数千行的现有关系或数据。有什么方

  • 问题内容: 我正在尝试将大量用户列表插入MySQL数据库,但是每次尝试都出现错误: 之所以这样,是因为第二列在很多条目上都是空白的,因此在第二列中插入一个空白条目后,就不会再添加另一个了。但是,当我昨天添加了大多数列表时,即使昨天添加的很多条目在第2列中也有一个空白单元格,我也没有一次收到此错误。这是怎么回事? 这是插入1个条目的sql代码。其余的遵循相同的格式: 问题答案: 除了Sabeen的答

  • 问题内容: 我正在一个数据库应用程序上工作,该应用程序大部分是只读的,但是有一个表记录应用程序中用户的移动并对其进行大量写入。对于每几千次写入,我们在错误日志中看到一些异常,如下所示: 有问题的表具有以下架构: 以及对应的Hibernate映射XML: 尽管我们不太可能,但我们的web应用程序的多个实例可能一次写入数据库,因为我们在webapp上下文中对版本号进行了编码,以无缝发布应用程序的新版本

  • 问题内容: 尝试以下操作时,我在此错误消息上遇到了问题: 错误代码:1062。键“ PRIMARY”的条目“ 1”重复 我没有auto_increment数据,请帮助我! 这是与表格相关的, UFFICIO-INFORMAZIONI 插入 问题答案: 该 主 为什么已经产生错误的原因是因为已经有一个现有值的列在其中将其定义为( 值是唯一 在要插入的表格)。 为什么不将列设置为? 当您插入记录时,您

  • 当我尝试这个错误消息时,我遇到了一个问题: