2014-11-07 3 views
-5

Полная ошибка: Неустранимая ошибка: исключение исключение «Исключение» с сообщением «id не поставлено» в/var/www/html/pdo/Delete. php в строке 12 + (!) Исключение: id не указан в /var/www/html/pdo/Delete.php в строке 12. Я тестирую страницу для вызова функции удаления, которая удаляет строку, которая соответствует идентификатору, который я даю в моем тесте. Он работает, он удаляет строку с этим идентификатором. Но дает мне это предупреждение. Вот мой код:Неустранимая ошибка: исключение исключение «Исключение» с сообщением «id not included»

<?php 

    include_once("StudentManager.php"); 
    //assumption is that the following parameters are passed to this file 
    //$id to be deleted. 

    //Tester 
    StudentManager::Delete(6); // 6 was the id I deleted. 

    extract($_REQUEST); 

    if(!isset($id)){ 
     throw new Exception("id not supplied"); 
     echo "Bad"; //It does not get to this. 
    } //else { 

     //echo StudentManager::Delete($id); 

    //} 



?> 
//Delete(id) and returns the number of rows affected by the delete 
    public static function Delete($id){ 
    $db = StudentManager::getPDOConnection(); 
    $sql = "DELETE FROM people WHERE id=".$id; 

    $di = $db->prepare($sql);  

    $di->execute(array(":id"=>$id));  

    $affected_rows = $di->rowCount();          

    echo "<p>$affected_rows rows were Deleted.</p>"; 
    $db = null; 
    return $affected_rows; 

} //end of delete 
+0

Пожалуйста, не сбрасывать код на комментарии. отредактируйте наше оригинальное сообщение, чтобы добавить код. –

+0

@ Джей Бланшар, спасибо, я удалил свой комментарий и добавил его в код. –

+0

Знаете ли вы, что подготовили заявления? Если да, то почему вы не связываете идентификатор с помощью подготовленных операторов? –

ответ

1
throw new Exception("id not supplied"); 

Эта линия бросает исключение, которое вызывает фатальную ошибку вы видите.

Он работает под этим условием:

if(!isset($id)){ 

Так, очевидно, что условие выполнено, а это означает, что переменная $id не установлена.

Также, extract($_REQUEST) является крайне плохой практикой.

Простой пример область применения:

function foo($a) { 
    $a = 5; 
    echo $a; //5 
} 
$a = 42; 
echo $a; //42 
foo($a); //will echo 5 
echo $a; //Still 42. Different $a. 
+0

Но я думал, что мой чек состоит в том, чтобы проверить, не прошел ли идентификатор, и это в моем тесте. Так что! Isset должен игнорировать это, поскольку он установлен. или я смотрю на это неправильно. –

+0

Зачем это проверять? Идентификатор '$ id ', переданный в isset, и' $ id', переданные функции, различны. Читайте о том, как область действия работает в PHP (это не так сложно). –

+1

Да, это была область. Я тестировал код не в том месте. Теперь он отлично работает, я тестирую его из других источников. –

Смежные вопросы