2017-05-01 27 views
0

我是新来的PHP。我试图重定向到php中的错误页面,当我得到一个MySQL连接错误,但我得到一个错误,指出我不能修改头,因为输出已经在第8行(我创建连接)发送。请你能建议这样做的正确方法吗?无法重定向后mysqli连接错误

<?php 
$servername = "localhost:3306"; 
$username = "danny"; 
$password = "sql1"; 
$dbname = "testdb"; 

    try{ 
     $conn = new mysqli($servername, $username, $password, $dbname); 
    } 
    catch(Exception $e){ 
    header('Location: /connection_error.php'); 
    die(); 
} 


?> 

感谢

丹尼

回答

2

你需要在顶部加入这一行告诉mysqli的抛出异常

mysqli_report(MYSQLI_REPORT_STRICT); 
$servername = "localhost:3306"; 
$username = "danny"; 
$password = "sql1"; 
$dbname = "testdb"; 

    try{ 
     $conn = new mysqli($servername, $username, $password, $dbname); 
    } 
    catch(Exception $e){ 
    header('Location: /connection_error.php'); 
    die(); 
} 
+0

谢谢你这个工作。我可以关闭catch块中的连接 – DannyR

+0

@DannyR连接未打开;这就是为什么它进入异常 –

-1

试试这个

<?php 
ob_start(); 

$servername = "localhost:3306"; 
$username = "danny"; 
$password = "sql1"; 
$dbname = "testdb"; 

    try{ 
     $conn = new mysqli($servername, $username, $password, $dbname); 
    } 
    catch(Exception $e){ 
    header('Location: /connection_error.php'); 
} 

ob_flush(); 
?> 
+0

刷新缓冲区在这种情况下没有区别。 –

+0

根本不会去捕捉错误,因为连接将会停止并发出拒绝访问的警告。 –

0

此外,你总是可以检查th e使用mysqli::$connect_errno从上次连接呼叫发出的错误代码,但如果失败,则会返回上次呼叫的错误代码值。零意味着没有错误发生(因此错误)。

<?php 
    /* Variable Defaults */ 
    $servername = 'localhost:3306'; 
    $username = 'danny'; 
    $password = 'sql1'; 
    $dbname  = 'testdb'; 

    /* Make Connection */ 
    $conn = new mysqli($servername, $username, $password, $dbname); 

    /* Check Connection */ 
    if($conn->connect_errno) { 
     /* Redirect */ 
     header('Location: /connection_error.php'); 
     exit(); 
    } 
?> 
+0

如果你的'mysqli'调用显示通知,你将不能使用'header()',因为头文件已经被发送。我会建议修改你的'error_reporting'来不显示通知。 – Daerik