我是一个php新手,正在使用php和mysql创建一个webform(我有一些mysql方面的经验,但最多是中级水平)。前端webform允许用户输入以下4个参数的值:流派、 composer 、乐器和合奏。这些参数中的每一个都可以取一个适当的名称(例如,“古典”表示流派,“小提琴”表示乐器等),或者取一个称为“all”的值。如果为“all”,那么mysql数据库将返回该参数或多个参数的所有行(当然,对其他不是“all”的参数进行过滤)。我还想用准备好的语句编写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\u stmt\ux命令的执行无效。我不知道那个错误是什么,也不知道如何修正它。
如果有人能告诉我如何编写where子句,在一个或多个参数值为“all”时返回所需的行,我将不胜感激。提前谢谢。
1条答案
按热度按时间ffx8fchx1#
我更愿意使用php而不是mysql命令来改变语句:
然后,仅当输入不是'all'时才包括列查询。