【问题标题】:How to get MySQL error parameters?如何获取 MySQL 错误参数?
【发布时间】:2016-08-16 10:32:06
【问题描述】:

如果出现 MySQL 错误,例如重复条目,我想获取导致问题的字段的名称。我是这样做的:

$err = $mysqli->error;
$errno = $mysqli->errno;
...
if ($errno == 1062)
{
    $begin = strpos($err, "' for key '") + 11;
    $end = strlen($err) - 1;
    $arg = substr($err, $begin, $end - $begin);
}

所以$arg 存储名称。不过,这并不是一种超级可靠的方法,因为据我所知,不能保证错误的格式在不同版本和数据库之间保持相同。

有没有更直接的方法来获取该字段的名称?

【问题讨论】:

  • 这是个问题。我会使用存储整个错误消息或通过正则表达式获取值。您需要知道如何通过错误代码解析错误值。如果新版本的 sql 引擎可以更改错误,这是一个问题。如果你需要,我会让数组 errorCode => regex 如何获得某个值。
  • 你为什么想要它?在精心设计的应用程序中,不需要名称。同一张表上不应该有很多唯一索引。
  • @YourCommonSense 假设我有一个学生表,例如,每个学生都有他们唯一的学生 ID、学校电子服务的用户名、电话号码、社会保险号和电子邮件
  • 好吧,如果你想检查,那就先做一个选择。

标签: php mysql mysqli


【解决方案1】:

您将执行如下的嵌套 CASE 语句。结果将返回具有重复条目的字段。如果超过 1 个重复条目,它将为每个条目做出响应。

   SELECT PD.column_name1, PD.column_name2, PD.column_name3 FROM table_name WHERE PD.column_name1 = value1, PD.column_name2 = value2, PD.column_name3 = value3 AS PD (SELECT CASE
      WHEN PD.column_name1 = value1 THEN "column_name1" 
      WHEN PD.column_name2 = value2 THEN "column_name2" 
      WHEN PD.column_name3 = value3 THEN "column_name3")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 2011-10-10
    相关资源
    最近更新 更多