Ну и в принципе для 404 не предполагается Location.
Для 301/302 в rfc написано: см. заголовок Location
Для 404 это один из множества заголовков ответа. Ничего с ним делать не предписано, зато предписано что клиент не должен реагировать на дополнительные заголовки, которые клиент не считает неободимыми.
The second special case is the "Location:" header. Not only does it send this header back to the browser, but it also returns a REDIRECT (302) status code to the browser unless the 201 or a 3xx status code has already been set.
code присутствует т.к. он присутствует в классе Exception выше в иерархии наследования, а конструктор предполагается единственным способом задания этого параметра.
Можете использовать как пожелаете или игнорировать его.
severity добавлен непосредственно в ErrorException и предполагается что будет использован для передачи E_* констант. Его некорректно называть кодом ошибки, это уровень предупреждения. Поэтому это две разные штуки. severity уровень пойманного ErrorException можете получить методом getSeverity
Вы очевидно никак не готовы для этой работы.
Если в качестве тестового задания дают написание скрипта PHP, хоть и такого элементарного - значит от вас ожидают хотя бы такие базовые навыки по этому языку.
Даниил7389 пишет:
просто мои знания в PHP 4 дня
Для меня это звучит не оправданием, а отягчающим обстоятельством. Зачем сунулись на такую работу с нулевыми знаниями?
Зачем вам для такого задания вообще СУБД? Не вижу в задании требования этот список вовсе хранить. Только upload да прочитать и вывести в виде цветной таблички.
Гипотеза: у вас некоторое число таблиц идентичной структуры.
Почему я так подумал: если бы структуры были различны - у вас бы не стояло вопроса как проверять имя таблицы, а выбор был бы детерминирован.
Вывод: это должна быть одна таблица. Имя искусственного водного пути (хотя при чём тут водные пути? Но canal это именно оно) - такой же параметр запроса, а не имя таблицы.
В итоге вы ищите проблему там где её нет, просто соорудив странную схему базы.
с подготовленным запросом можно выполнить drop table ? Вернее втыкнуть инъекцию?
А что вас собственно удивляет?
Если продолжать конкатенировать запрос с данными - то ничего не изменится. prepared statement не серебряная пуля, а лишь транспорт.
Я отдельно уточнил где проверял, потому что на сколько помню в pdo_mysql намеренно отломаны мультизапросы. При том именно из-за безалаберного отношения авторов кода (не могу назвать разработчиками) к sql инъекциям. А про другие драйвера вовсе ничего сказать не могу.
iv888 пишет:
но переменная для выбора таблицы не вписывается в модель prepared statement.
Этот мой комментарий относился именно к вашей модели данных.
Использовать пользовательский ввод в качестве имени объекта - идея плохая и так быть не должно.