我有以下代码:
// Connect to DB
$mysqli = new mysqli( $host, $user, $password, $database );
if( ! $mysqli )
{
echo "Unable to connect to database\n";
exit(1);
}如果提供的密码或主机名/地址无效,mysqli对象将被实例化。! $mysqli被评估为false,因此不会检测到连接故障。
如果我检查$mysqli->error,我不会得到任何错误。
发生的情况是PHP (我在命令行中使用的是PHP5.6)发出警告。则失败的是第一次查询或任何其它尝试操作该(失败的)连接。
在代码中抑制警告并捕获连接失败的最好方法是什么?
发布于 2016-10-18 19:09:24
报告mysqli错误的最佳方法是将mysqli报告模式设置为exceptions。在这种情况下,您的所有代码都将缩短两行:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli( $host, $user, $password, $database);--它将执行您想要的操作:输出错误消息并停止脚本执行。
对于web版本,它应该保持不变,而在您的web服务器的配置中,您必须设置一个500错误页面,以便在PHP导致错误时自动显示。例如对于Apache,
ErrorDocument 500 /error.html因为为每个可能的错误编写一个专用的错误处理程序是没有意义的。
发布于 2016-10-18 18:42:58
按照Roger Pennink的建议,可以在尝试连接之后检查mysqli::$connect_error和mysqli::$connect_errno。
由于可以使用@操作符抑制警告,因此可以按如下方式重写代码:
// Connect to DB
@$mysqli = new mysqli( $host, $user, $password, $database );
if( ! $mysqli )
{
echo "Unable to connect to database.\n";
exit(1);
}
if( $mysqli->connect_errno )
{
echo "Unable to connect to database: " . $mysqli->connect_error . "\n";
exit(1);
}当然,应该考虑到@也会抑制错误。
发布于 2016-10-18 18:27:47
我们这样做:
<?php
function connect($DB_HOST,$DB_NAME,$DB_USER,$DB_PWD){
try {
$host=$DB_HOST;
$dbname= $DB_NAME;
$OPTIONEN = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
$DBH = new PDO("mysql:host=$host;dbname=$dbname", $DB_USER, $DB_PWD,$OPTIONEN);
$DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$DBH->exec("set names utf8");
$DBH->exec("SET CHARACTER SET 'utf8'");
return $DBH;
}
catch(PDOException $e) {
echo "Error in database-connection: {$e->getMessage()} ";
}
}
?>只是一个标准的尝试和捕捉。或者在你的例子中:
try{
$mysqli = new mysqli( $host, $user, $password, $database );
}
catch(PDOException $e) {
echo "Error in database-connection: {$e->getMessage()} ";
}https://stackoverflow.com/questions/40105703
复制相似问题