我的 search.php 正在做我需要的事情......几乎。它从搜索表单中获取两个值(一个文本类型值和一个选择类型值),并通过下面的代码将每个值存储在 search.php 页面中。一个问题是,如果有人将文本类型值留空(即下面的 $genre 值),则代码将看到 $genre value=""并且它将返回类型列中类型值为空的所有行。我不希望它返回任何类型为空白的行。
我认为我需要某种 if 条件,但不确定是否应该将其应用于变量声明部分或查询。
<?php
//declaring variable
$input = array(
"find" => $_POST['find'],
);
$genre = $input['find'][0];
$scategory = $input['find'][1];
//the sql statement
$results = $dbh->prepare("select
stories.SID,
stories.story_name,
stories.category,
stories.genre
FROM stories
WHERE stories.category = :cat OR stories.genre = :gen");
$results->bindParam(':cat', $scategory, PDO::PARAM_STR);
$results->bindParam(':gen', $sgenre, PDO::PARAM_STR);
$results->execute();
$row = $results->fetchAll(PDO::FETCH_ASSOC);
if ($row) {
echo '<table>';
echo '<tr>';
echo '<td><b>category</b></td>';
echo '<td><b>genre</b></td>';
echo '</tr>';
foreach ($row as $all) {
echo '<tr>';
echo "<td>$all[category]</td>";
echo "<td>$all[genre]</td>";
echo '</tr>';
}
echo '</table>';
}
最佳答案
如果您根本不想显示没有流派的任何内容,我建议在您的查询中添加一个条件:
WHERE (stories.category = :cat OR stories.genre = :gen)
AND NOT (genre = NULL OR genre = '')
如果您试图在未指定流派的情况下仅跳过空流派,我建议在 php 代码中使用条件:
if(! empty($genre)) {
$genre = "This_aint_no_genre";
};
或者您可以将代码更改为
$genre = $input['find'][0] || "This_aint_no_genre";
注意:这个 php 代码并不“干净”,但很实用。使用带有 if-else 的完整条件和单独的查询来获得干净的代码。
关于php - 如何防止 SQL 搜索查询返回列没有值的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28821690/