Я новичок в PHP и работаю над созданием веб-формы с использованием PHP и MySQL (у меня есть некоторый опыт работы с MySQL, но в большинстве случаев я на промежуточном уровне).Интерфейсная веб-форма позволяет пользователю вводить значения следующих 4 параметров: жанр, композитор, инструмент и ансамбль.Каждый из этих параметров может принимать либо собственное имя (например, «классический» для жанра, «скрипка» для инструмента и т. Д.), Либо значение, называемое «все».Если «все», то база данных MySQL будет возвращать все строки этого параметра или параметров (отфильтрованные, конечно, по другим параметрам, которые не являются «всеми»).Я также хочу написать PHP-коды, используя подготовленные операторы.
Итак, я написал следующий код PHP:
// The variables take the values entered by user in the webform
$genre = htmlspecialchars($_POST['genre']);
$composer = htmlspecialchars($_POST['composer']);
$instrument = htmlspecialchars($_POST['instrument']);
$ensemble = htmlspecialchars($_POST['ensemble']);
// Prepare the MySQL query and execute it using prepared statements
$sql_query = "SELECT db_genre, db_composer, db_instrument, db_ensemble FROM recording_metadata
WHERE (CASE WHEN ?='all' THEN true ELSE column=genre END) AND
(CASE WHEN ?='all' THEN true ELSE column=composer END) AND
(CASE WHEN ?='all' THEN true ELSE column=instrument END) AND
(CASE WHEN ?='all' THEN true ELSE column=ensemble END)";
$stmt = mysqli_stmt_init($con); //$con defined earlier by mysqli_connect
if (mysqli_stmt_prepare($stmt, $sql_query)) {
mysqli_stmt_bind_param($stmt, "ssss", $genre, $composer, $instrument, $ensemble);
}
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
mysqli_stmt_bind_result($stmt, $genre, $composer, $instrument, $ensemble);
Я только знаю, что предложение WHERE написано неправильно, потому что какая-то ошибка в нем делает недействительным выполнение последующих команд mysqli_stmt_ *.Я не знаю, что это за ошибка или как ее исправить.
Буду признателен, если кто-нибудь подскажет мне, как написать предложение WHERE, которое будет возвращать нужные строки, когда одно или несколько значений параметра равно "all",Заранее спасибо.