2017-05-01 31 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