В операторе if нет необходимости, и фактически нет смысла проверять результат prepare
, но игнорировать bind_param
, execute
и bind_result
.Ваш код должен быть согласованным и проверять возвращаемое значение всех или ни одного из них.
Проверка возвращаемых значений этих функций не требуется, если у вас включен отчет об ошибках MySQLi.Чтобы включить ошибки, поместите эту строку перед установлением соединения с БД:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Если в какой-либо из этих функций возникла проблема, то будет выдано исключение с сообщением об ошибке.Ошибка будет отображаться на экране, но вы должны помнить, чтобы переключить настройку ini display_errors
на false
в производственной среде, иначе ваши ошибки могут привести к утечке конфиденциальной информации.
Ваш код может выглядеть немногокороче и чище:
$sql = "SELECT album_name FROM albums WHERE artist_id=?";
$stmt = $link->prepare($sql);
$stmt->bind_param('i', $_POST['artist']);
$stmt->execute();
$stmt->bind_result($album);
while ($stmt->fetch()) {
printf("Album: %s<br />", $album);
}
Закрытие соединения также не требуется, если у вас нет веских причин для этого.
Что бы вы ни делали никогда echo
или die
содержимое $link->error
самостоятельно.Это очень плохая привычка многих разработчиков PHP, которая полностью избыточна.PHP может распечатать ошибки для вас, и он будет работать намного лучше, чем вы когда-либо.