Мне была назначена задача обработки ошибок для университетского проекта, и я не могу заставить ее работать. Мне нужно уловить ошибки SQL с помощью Try catch и перенаправить пользователя на новую страницу error.php, которая отображает ошибку. Я знаю, что это не лучший способ справиться с ошибками, но это то, чего хочет профессор.Обработка ошибок PHP - перенаправление
Вот пример одного из страниц я пытаюсь поймать ошибки на:
<?php
$orderid = $_REQUEST['orderid'];
connectDB(); // database connections are defined in connect_to_DB.php
try{
$strSql2 = "SELECT `order_date`, `status_id`, `emp_id`,`cust_id` FROM `salesorder` WHERE `order_id`='" .$orderid. "'" ;
$result = @mysqli_query($db, $strSql2) // or die("SQL error: " . mysqli_error());
if($row = mysqli_fetch_array($result)){
$orderDate = $row["order_date"];
$orderStatus=$row["status_id"];
$empid = $row["emp_id"];
$custid=$row["cust_id"];
if(!$result){
throw new Exception(mysqli_error($db));
}
mysqli_free_result($result); // Always release the recordset memory resources
mysqli_close($db); // Always close the database connection
connectDB();
$sqlcount = "SELECT COUNT(order_id) AS numrows FROM orderitem WHERE order_id=".$_REQUEST['orderid'];
$resultcount = @mysqli_query($db,$sqlcount) // or die ("SQL error: ".mysqli_error());
if($rowcount= mysqli_fetch_array($resultcount)){
$orderamount = $rowcount['numrows'];
if(!$resultcount){
throw new Exception(mysqli_error($db));
}
mysqli_free_result($resultcount);
mysqli_close($db);
}
}
} catch (Exception $e){
// redirect to a php error page
header("Location: error.php?msg=" . $e->getMessage() . "&line=" . $e->getLine());
}
Это код на странице ошибки, error.php
:
<?
print "Error message: " . $_GET["msg"];
if(isset($_GET["line"])){
print " - line number: " . $_GET["line"];
}
К сожалению, случайно удалил конец этого сообщения ... Прямо сейчас есть ошибка с оператором if в строке 66 if($row = mysqli)
, который я не могу очистить. Прежде чем я начал добавлять обработку ошибок, все работало нормально.
Заранее благодарим за помощь.
А что это вопрос? (Использовать urlencode для msg) – KiwiJuicer
Вы не можете поймать вещи, пока вы подавляете вывод с помощью '@' –
@JayBlanchard У меня создалось впечатление, что @ просто подавил сообщение для данного вызова функции, а не сама ошибка – colyerfs