2014-07-03 20 views
0

我想在我的Web應用程序中添加「下載信息」按鈕,以便當用戶輸入'user_id'並單擊該按鈕時,他/她的個人信息將以' user.txt'文件。在PHP中創建文件下載時捕獲MySQL錯誤

我使用PHP作爲我的主要語言和MySQL在後端。

所以,當用戶點擊該按鈕更改使用的標題:

$filename = 'user.txt'; 
header('Content-Description: File Transfer'); 
header('Content-Disposition: attachment; filename="' . $filename . '"'); 

的數據導出到文件正在從多個表中取出,併爲規模龐大的。而且約束是我無法在服務器上保存那麼多數據。所以我必須在從數據庫檢索到文件後立即將其刷新到文件中。

但這裏的問題是,我想在MySQL級別捕獲錯誤。例如,如果在執行查詢時出現問題,或者表user_details不存在,那麼我想在用戶的Web瀏覽器中顯示來自MySQL的相應錯誤。 但是在這種情況下,錯誤被打印在文件本身中。

解決此問題的任何解決方法?

+0

您可以使用[mysqli_error](http://www.php.net/manual/en/mysqli.error.php)檢查查詢結果並顯示錯誤詳細信息。不要使用已棄用的mysq_ *函數。改用mysqli_ *。看到我的答案[這裏](http://stackoverflow.com/questions/24549439/catch-mysql-errors-while-creating-file-download-in-php/24549520#24549508) –

回答

0

首先寫入查詢,然後您必須檢查用戶是否找到代碼以便下載其他明智的顯示錯誤消息。

$result = mysqli_query("SELECT * FROM `user_details` WHERE `user_id` = :user_id LIMIT 1"); 

if(isset($result['user_id']) && $result['user_id']!="") 
{ 
    $filename = 'user.txt'; 
    header('Content-Description: File Transfer'); 
    header('Content-Disposition: attachment; filename="' . $filename . '"'); 
    echo 'Username:' . $result['user_id'] . "\n"; 
} 
else 
{ 
    echo "Error Message"; 
} 
0

您可以在下載文件之前檢查查詢結果,如:

$link = some db connections 
$result = mysqli_query('your_query'); 
if (!$result) { 
    die('Technical error occured: ' . mysqli_error($link)); 
} else { 
    $filename = 'user.txt'; 
    header('Content-Description: File Transfer'); 
    header('Content-Disposition: attachment; filename="' . $filename . '"'); 
    ...... 
} 
+0

我已更新我的文章。請看一看。 – Ashutosh

+0

是的,我刪除了我的評論^^(幾分鐘後將刪除此評論) – Sal00m

+0

@ashutosh所以,你想要什麼?由於更新的文字與您的問題 –

0

也許你可以先做所有數據庫查詢和填充數據給變量parexample $出來,如果你發現一些錯誤,您可以顯示此信息給用戶。如果一切順利通過,那麼你可以使用echo $ out做header功能並輸出內容給用戶。

+0

我已更新我的帖子。請看一看。 – Ashutosh

+0

如果您必須在文件開始處設置標題,則只能將錯誤消息寫入(例如)$ _SESSION並重定向到您將顯示錯誤的另一個頁面。但在這種情況下,下載器文件將不完整。 –

+0

如何在下載過程中重定向到新頁面?此外,該文件將是沒有用的,所以如何取消下載? – Ashutosh

0
$qry = "SELECT * FROM `user_details` WHERE `user_id` = :user_id LIMIT 1"; 

if ($result = $mysqli->query($qry)) { 
    if ($result->num_rows > 0) { 
     $row = $result->fetch_object(); 
     $userName = $row->user_name; 
     echo 'Username:' . $userName . "\n";  
    } 
}