【问题标题】:Are MySQL error codes returned by mysqli_errno() consistent?mysqli_errno() 返回的 MySQL 错误码是否一致?
【发布时间】:2020-04-20 23:55:00
【问题描述】:

我想知道mysqli_errno()返回的MySQL错误代码是否一致,或者换句话说,它们可以在下一个版本的MySQL中改变吗?

我正在做这样的事情:

$errNo = mysqli_errno($link);
if($errNo == 1146)
{
    //Table doesn't exist
}

【问题讨论】:

  • 可能不会。但是您可以将此代码设置为静态助手或常量,因此如果要更改某些内容,您可以只修复一个助手或常量。

标签: php mysql error-code


【解决方案1】:

我想某些情况的错误代码可能会改变。但这不太可能,而且我确信 MySQL 有动力避免破坏每个人的代码。

如果您想确定,至少有两种直接的方法可以做到这一点:

  1. 阅读文档!每个版本的 MySQL 的错误代码都列在参考页面中。您可以通过更改右上角的选择器来选择您正在阅读的文档的版本。

    https://dev.mysql.com/doc/refman/8.0/en/server-error-reference.html

  2. 经验测试!在MySQL客户端试试操作,看看输出的是哪个错误码。在您担心的任何升级之前执行此操作。

    mysql> select * from table_that_does_not_exist;
    ERROR 1146 (42S02): Table 'test.table_that_does_not_exist' doesn't exist
    
    mysql> select version();
    +---------------+
    | version()     |
    +---------------+
    | 5.7.27-30-log |
    +---------------+
    

    然后测试另一个版本:

    mysql> select * from table_that_does_not_exist;
    ERROR 1146 (42S02): Table 'test.table_that_does_not_exist' doesn't exist
    
    mysql> select version();
    +-----------+
    | version() |
    +-----------+
    | 8.0.17-8  |
    +-----------+
    

【讨论】:

    【解决方案2】:

    我不希望这些代码永远改变,因为毫无疑问有未知数量的代码确实使用了像43 这样的硬编码常量。但是应该使用常量。 (例如:https://github.com/VividCortex/mysqlerr。)每种具有 MySQL 接口的编程语言也提供常量。

    但是,请注意,随着时间的推移,由于底层 MySQL 系统的工作方式发生了变化,一些错误代码确实会变得过时。考虑上述网站的以下引用:

    请注意,一些常量在更高版本的 MySQL 中被重命名,因为它们已经过时了。 (如果您想知道:这里的名称与 MySQL 在源代码中使用的符号匹配。)在此包中未更改过时的名称以避免破坏代码,但您不应再在应用程序中使用它们。

    ...我要进一步补充的是,“您的应用程序中现在测试任何这些过时常量的任何逻辑现在可能也需要进一步更改。” 如果 MySQL 团队重命名一个常量,他们可能做得更多。

    很明显,如果您按照应有的方式使用了常量,那么在您的代码中查找这些位置会变得更加容易。 (一旦你继续前进,对追随你的人尤其重要......)你应该总是查看每个新版本的 MySQL(或你的代码所依赖的任何其他系统,包括语言本身)中的发行说明.功能有时会被声明为“已弃用”,您有责任让您的应用程序保持最新状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      相关资源
      最近更新 更多