【问题标题】:Identify duplicate entry for user, MySQL & PHP识别用户、MySQL 和 PHP 的重复条目
【发布时间】:2012-06-04 10:58:00
【问题描述】:

我有一个提交表单,当用户尝试使用重复条目提交它时,它会返回 MySQL 错误 #1062。例如,错误状态:

Duplicate entry 'graphics' for key 'name'

我想给用户一个自定义消息,解释(用简单的英语)他们为什么会出错,以及导致错误的具体条目。例如:

"Graphics" is a duplicate entry and should not be used. Please remove it and resubmit the form."

键始终是“名称”,但重复条目本身通常会有所不同。我需要能够从生成的 MySQL 错误中提取该特定值,然后将我的自定义消息包装在它周围。这怎么可能?

【问题讨论】:

  • 您可以从数据库中提取所有“名称”字段,然后在开始插入数据库之前在 PHP 中与用户指定的值进行比较检查。
  • 在创建查询时,您在变量中没有值吗?您不能只使用它吗?
  • 顺便说一句。附带说明:请停止使用古老的 mysql_* 函数编写新代码。它们不再被维护并且社区已经开始了弃用过程。相反,您应该了解准备好的语句并使用 PDO 或 MySQLi。
  • @bono 我只知道旧的 mysql 。除了 php.net 之外,任何好的初学者教程都很难学习 pdo 和 mysqli 吗?它从 basci 中教你,例如从 basci sql 中更新 delte 插入 select 函数
  • 一点也不难学,1天就搞定了大部分。这是一个很好的教程:wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

标签: php mysql error-handling duplicates


【解决方案1】:

您可以尝试进行简单的错误检查,如果发生 mysql 错误,则向用户显示您的错误消息。你可以试试这样的:

$rows = mysql_query("SELECT `name` from `tbl` WHERE `name` = 'graphics';");

if(mysql_num_rows($rows) > 0){
    echo '"Graphics" is a duplicate entry and should not be used. Please remove it and resubmit the form.';
}else{
    insert...
}

【讨论】:

    【解决方案2】:

    如果您要插入的项目事先存在,您可以在输入任何数据之前先检查表格。

    其次,您可以使用 if else 循环根据错误打印自定义消息 喜欢

          $check_exists = // runs the code here to check if the entry graphics already exists for the existing name
    
         if ($post['name'] == ''){
    
         // error message for blank entry 
    
         }elseif($check_exists == true) {
    
       // custom error mesage for duplicate entry 
    
        }else {
    
      // submit the form here
    
        }
    

    【讨论】:

    • 虽然思路是对的,但提供的代码用处不大
    • 我只用这种方式编码。我对表格结构不太清楚,我告诉他这样做的逻辑。
    • @bono 如果我们编写简单的 mysql 查询,那么任何人都将如何学习。他问怎么做不为他做:)
    • 我实际上更多地指的是 $check_exists “代码”。这对我来说真的没有任何意义,因为它是一个变量,它如何“运行代码来检查”。另外虽然我同意自学是最好的方法,但这个地方是一个学习的地方:)
    • 我知道如何通过在基本 sql 中合并两个值来做到这一点,但 dint 知道在新 sql 中所以建议所以 dint 然后写。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2012-05-09
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2017-04-14
    • 1970-01-01
    相关资源
    最近更新 更多