首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们应该总是跟踪查询和数据库错误吗?

问我们应该总是跟踪查询和数据库错误吗?
EN

Stack Overflow用户
提问于 2013-05-12 23:03:58
回答 2查看 147关注 0票数 2

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

代码语言:javascript
复制
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 { ... }

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

欢迎来自那些有处理一堆查询和数据库连接经验的人的任何建议。您是否每次都这样做,以跟踪可能的错误?

如果你跳过一些,跟踪最重要的部分呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-12 23:15:10

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

是的,是的,是的!

跟踪错误消息是一个编程的基石。程序员是丛林中无助的婴儿,没有错误消息。

然而,你选择的跟踪方式是很糟糕的。

错误消息有两个目标:

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

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

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

改用内置的PHP机制--要么抛出一个错误,要么抛出异常。

代码语言:javascript
复制
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:

代码语言:javascript
复制
error_reporting(E_ALL);
ini_set('display_errors',1);

你可以在屏幕上看到所有的错误信息

而在实时服务器上,你也必须跟踪它们,但要记录它们:

代码语言:javascript
复制
error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);

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

为了简化mysqli_query()的日常使用,必须将此函数封装到某个用户定义的函数或方法中-因此,您可以使用以下命令调用它

代码语言:javascript
复制
$db->query('CREATE DATABASE mywebsite');

所有的错误处理工作都是在内部完成的-这是避免手动错误处理的唯一合适的方法,同时又能让它始终处于工作状态。

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

票数 5
EN

Stack Overflow用户

发布于 2013-05-12 23:38:24

假设你这样问是因为你不想用错误处理把你的代码搞得一团糟,我想在上面给出的答案中加上以下几点。

即使我没有使用成熟的MVC框架,我也总是在PHP中使用围绕本机数据库函数的包装器库。他们为我做所有的错误处理,帮助我避免sql注入等等。

因此,我建议您查看以下组件之一:

  • Zend (可以在没有Zend Framework的情况下使用,这个blog post解释了如何使用
  • Doctrine DBAL -这是Doctrine ORM的一部分,例如用于像Silex这样的微框架,当然还有像symfony2这样的成熟框架-请参阅this blog post for an introduction

在任何一种情况下,学习使用这些库都不会浪费时间-您很可能会在其他PHP项目中再次看到它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16508702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档