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

anc*_*ncm 2 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 { ... }
Run Code Online (Sandbox Code Playgroud)

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

任何具有处理大量查询和数据库连接经验的人的建议都会受到欢迎.您是否每次都为此追踪可能的错误?

如果你跳过一些并跟踪最重要的内容怎么办?

You*_*nse 5

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

是的,是的,是的!

跟踪错误消息是编程的基石.一个程序员是一个无助的婴儿在树林里没有错误信息.

但是,您选择跟踪的方式非常糟糕.

错误消息有两个目标:

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

因此,您必须使跟踪代码能够同时执行这两项操作.从而,

永远不会直接回复错误消息.

使用内置的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 );
}
Run Code Online (Sandbox Code Playgroud)

这样您就拥有了可靠,便捷的报告系统,可以通过单个PHP配置选项进行控制.

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

error_reporting(E_ALL);
ini_set('display_errors',1);
Run Code Online (Sandbox Code Playgroud)

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

error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);
Run Code Online (Sandbox Code Playgroud)

尽管存在共同的错觉,但对于实时服务器而言,错误消息比开发消息更重要.因此,既不会error_reporting(0)也不@应该以"不向用户显示错误消息"为借口.不想显示?关闭显示,但不关闭错误消息.

为了方便日常使用mysqli_query(),必须将此功能封装到一些用户定义的功能或方法中 - 因此,您只需调用它即可

$db->query('CREATE DATABASE mywebsite');
Run Code Online (Sandbox Code Playgroud)

在内部完成所有错误处理工作 - 这是避免手动错误处理的唯一正确方法,但它总是值班.

并且,关于"some db connections"- 整个应用程序中应该只有一个(具有相同的凭据).将连接代码放入您在所有页面中包含的某个引导程序文件中.