У меня есть простой PHP-скрипт, который извлекает строку из базы данных MySQL на основе параметра GET URL, просто int, называемый, скажем, ID.
Если параметр GET должен быть недопустимым идентификатором для базы данных, например, если кто-то вводит int, который не является строкой в БД, или он пытается ввести символ или что-то еще, я хотел бы отобразитьзапись по умолчанию.
Следующий код на самом деле работает, но я чувствую, что это плохой код.Я просто не уверен, почему или что я должен делать.Я знаю, что должен проверить ID - это int перед выполнением запросов к базе данных, но это не решает, что делать, когда используется целое число, которое является недопустимым ID.
Итак, чтобы сделать это правильным вопросом,как мне восстановиться после mysqli_stmt_fetch, возвращающего false?
Успокойся, я знаю, что я начинающий: -)
$ID = (int)$_GET["id"];
$query = "SELECT `col1`, `col2`, `col3` FROM `table` WHERE `ID` = ?";
if ($stmt = mysqli_prepare($connection, $query))
{
mysqli_stmt_bind_param($stmt, "i", $ID);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $var1, $var2, $var3);
if (!mysqli_stmt_fetch($stmt))
{
$ID = 1; //A record I know exists and will always exist
mysqli_stmt_bind_param($stmt, "i", $ID);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $var1, $var2, $var3);
mysqli_stmt_fetch($stmt);
}
mysqli_stmt_close($stmt);
}
ОК, поэтому с некоторыми отзывами и экспериментами я произнесID как int в PHP и изменил SQL-запрос на это:
SELECT `col1`, `col2`, `col3`
FROM `table`
WHERE `ID` = ?
UNION
SELECT `col1`, `col2`, `col3`
FROM `table`
WHERE `ID` = 1
LIMIT 1
Это работает для всех случаев, о которых я могу думать, и кажется безопасным.Любые проблемы?Лучше, чем у меня было?