class ProductController extends Controller
{
public function actionIndex($id) {
if(is_numeric($id)) {
$product = Product::findOne($id);
if ($product != null) {
...
}
return $this->redirect(['index']);
}
}
Здравствуйте! Прошу подсказать нужна ли проверка в данном случае функцией is_numeric? Если ввести вместо цифры какую-то фигню происходит sql ошибка. Возможно в Yii как-то предусотрен этот момент и есть альтернатива?
Не нужно, и ошибка происходить не должна. Просто запись не должна находиться, и всё. Никогда не привожу к int, поскольку yii2 сам заботится о безопасности запроса
mkramer писал(а): ↑2017.06.17, 14:54
Не нужно, и ошибка происходить не должна. Просто запись не должна находиться, и всё. Никогда не привожу к int, поскольку yii2 сам заботится о безопасности запроса
mkramer писал(а): ↑2017.06.25, 19:27
Product::findOne("Оладушки с хреном") - такой вызов просто null возвращать должен, никаких ошибок SQL не должен генерировать
Ну, например, с MSSQL Server сразу ловится исключение "SQLSTATE[22018]: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Ошибка преобразования значения nvarchar "Оладушки с хреном" в тип данных int.". О какой защите со стороны фреймворка идёт речь?
А, надо было с этого начинать. Я не имел дела с MS SQL. Значит там остаётся только преобразовывать, как показал zelenin. Или переопределить ActiveQuery, его можно переопределить через dependency injection: http://www.yiiframework.com/doc-2.0/gui ... igurations
mkramer писал(а): ↑2017.06.26, 00:44
А, надо было с этого начинать. Я не имел дела с MS SQL. Значит там остаётся только преобразовывать, как показал zelenin. Или переопределить ActiveQuery, его можно переопределить через dependency injection: http://www.yiiframework.com/doc-2.0/gui ... igurations
Тему создал не я. Просто привёл пример, что всё может быть не так просто.
mkramer писал(а): ↑2017.06.25, 19:27
Product::findOne("Оладушки с хреном") - такой вызов просто null возвращать должен, никаких ошибок SQL не должен генерировать