php - 我们应该始终跟踪查询和数据库错误吗?

标签 php mysql sql mysqli

我想知道是否每次我们连接到数据库时, 或查询,我们必须跟踪错误,例如:

if (!$mysqli = new mysqli('localhost', 'root', ''))
    echo 'Error: (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error;
} else { ... }


if (!$mysqli->query('CREATE DATABASE mywebsite'))
    echo 'Error: (' . $mysqli->errno . ') ' . $mysqli->error;
} else { ... }

我正在做一堆查询和一些数据库连接,所以我应该一直这样进行吗?虽然有点累:/

欢迎有处理大量查询和数据库连接经验的人提出任何建议。您是否每次都对其中的每一个都执行此操作以跟踪可能的错误?

如果您跳过一些并跟踪最重要的会怎么样?

最佳答案

Should we always track query and db errors?

是,是,是!

跟踪错误消息是编程的基石。没有错误信息,程序员就像树林里无助的婴儿。

但是,您选择的跟踪方式很糟糕。

错误消息有两个目的地:

  • 在开发服务器上,在屏幕上显示它们非常方便
  • 但在实时服务器上,它们应该被记录

因此,您必须让您的跟踪代码能够做到这两点。因此,

永远不要直接回显错误信息。

改为使用内置的 PHP 机制 - 引发错误或异常。

if (!$mysqli = new mysqli('localhost', 'root', ''))
    throw new Exception( $mysqli->connect_errno . $mysqli->connect_error);
}

if (!$mysqli->query('CREATE DATABASE mywebsite'))
    throw new Exception( $mysqli->error );
}

这样您将拥有可靠且方便的报告系统,可以通过单个 PHP 配置选项进行控制。

因此,在本地开发服务器上以这种方式配置 PHP:

error_reporting(E_ALL);
ini_set('display_errors',1);

您将能够在屏幕上看到所有错误消息
在实时服务器上,您也必须跟踪它们,但要记录它们:

error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);

尽管有一种常见的错觉,对于实时服务器错误消息比开发错误消息重要得多。因此,error_reporting(0)@ 都不应该以“不向用户显示错误消息”为借口使用。不想显示?关闭显示,但不关闭错误消息本身。

为了简化 mysqli_query() 的日常使用,必须将此函数封装到一些用户定义的函数或方法中 - 因此,您将能够调用它

$db->query('CREATE DATABASE mywebsite');

所有错误处理工作都在内部完成 - 这是避免手动错误处理但始终在值类的唯一正确方法。

并且,关于“一些数据库连接” - 在整个应用程序中应该只有一个(具有相同的凭据)。将连接代码放入您包含在所有页面中的一些引导文件中。

关于php - 我们应该始终跟踪查询和数据库错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16508702/

相关文章:

PHP函数使用PDO打开数据库

sql - golang数据库开放函数歧义

sql - MySQL:为用户获得最高分

javascript - 如何在 PHP 的 while 循环中创建 if else 条件?

使用ajax时Javascript "for"循环问题,即使条件为假,循环也可以访问

c# - SQL 中的标准差命令

php - 查找重复项并在 sql 中合并它们的值

php - 反向数据库无法从终端运行(PROPEL/BAKE CAKEPHP)

mysql - 为什么这个查询不运行?

php - 使用 2.0+ API、PHP SDK 在 Facebook 群组上发帖