我想知道,是否每次我们连接到数据库或查询时,我们都必须跟踪错误,如:
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 { ... }我正在做一堆查询和一些数据库连接,所以我应该总是这样进行吗?虽然这有点累:/
欢迎来自那些有处理一堆查询和数据库连接经验的人的任何建议。您是否每次都这样做,以跟踪可能的错误?
如果你跳过一些,跟踪最重要的部分呢?
发布于 2013-05-12 23:15:10
我们应该始终跟踪查询和数据库错误吗?
是的,是的,是的!
跟踪错误消息是一个编程的基石。程序员是丛林中无助的婴儿,没有错误消息。
然而,你选择的跟踪方式是很糟糕的。
错误消息有两个目标:
因此,您必须使您的跟踪代码能够做到这两点。因此,
永远不要直接回显错误消息。
改用内置的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:
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');所有的错误处理工作都是在内部完成的-这是避免手动错误处理的唯一合适的方法,同时又能让它始终处于工作状态。
关于"some db connections" -在整个应用程序中应该只有一个(具有相同的凭据)。将连接代码放入某个引导程序文件中,该文件包含在所有页面中。
发布于 2013-05-12 23:38:24
假设你这样问是因为你不想用错误处理把你的代码搞得一团糟,我想在上面给出的答案中加上以下几点。
即使我没有使用成熟的MVC框架,我也总是在PHP中使用围绕本机数据库函数的包装器库。他们为我做所有的错误处理,帮助我避免sql注入等等。
因此,我建议您查看以下组件之一:
在任何一种情况下,学习使用这些库都不会浪费时间-您很可能会在其他PHP项目中再次看到它们。
https://stackoverflow.com/questions/16508702
复制相似问题