php - 如何防止 SQL 搜索查询返回列没有值的行?

标签 php mysql

我的 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/

相关文章:

php - 在PHP中,如何实现和Java中StringTokenizer一样的目的?

php - 基于自定义字段的 WooCommerce 产品变化价格

javascript - 如何在悬停时更改模式弹出窗口的字体大小

PHP $_POST 数组为空,但是 $_GET 完好无损

php - MySQL:链接评论的答案,分组和有限

mysql - Hibernate - Tomcat - MySQL 问题

php - 为什么我不应该在 PHP 中使用 mysql_* 函数?

PHP/MySql - DateTime 检测是否已分配值?

php - 警告 : Cannot modify header information - headers already sent by ERROR

php - 如何防止 PHP 中的 SQL 注入(inject)?