Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何防止SQL搜索查询返回列没有值的行?_Php_Mysql - Fatal编程技术网

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

Php 如何防止SQL搜索查询返回列没有值的行?,php,mysql,Php,Mysql,我有我的search.php做我需要的…几乎。它从搜索表单中获取两个值(文本类型值和选择类型值),并通过下面的代码将每个值存储在search.php页面中。一个问题是,如果有人将文本类型值留空(即下面的$GREEP值),代码将看到$GREEP value=“”,并且它将返回GREEP列中GREEP值为空的所有行。我不希望它返回任何类型为空的行 我想我需要某种if条件,但不确定是否应该将其应用于变量声明部分或查询 <?php //declaring variable $input = a

我有我的search.php做我需要的…几乎。它从搜索表单中获取两个值(文本类型值和选择类型值),并通过下面的代码将每个值存储在search.php页面中。一个问题是,如果有人将文本类型值留空(即下面的$GREEP值),代码将看到$GREEP value=“”,并且它将返回GREEP列中GREEP值为空的所有行。我不希望它返回任何类型为空的行

我想我需要某种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一起使用,并单独查询干净代码。

您应该防止从一开始就处于错误状态。如果不希望顶部存在空字段,则应在插入前检查该字段。如果您确实希望允许空字段,但只是在查询中跳过这些字段,那么您应该能够使用WHERE语句来禁止捕获带有空字段的记录。如果用户希望按他们选择的关键字进行搜索,我确实需要将文本输入作为搜索字段选项之一。如果他们不输入关键字,只从选择框中选择某个内容,则会有一个空值。但我可以试试哪种类型!=空方法在我的查询中,我猜实际上这不起作用。对于我确实想返回的记录,b/c类型可能为空,例如,在搜索中选择了类别,但类型为空。嗯,我不知道这些其他的多选项搜索表单是怎么工作的,我在哪里都看到了。不是很优雅,但我输入了两次查询。对于第一个我不希望类型有任何值的查询,我使用了if(empty($sgenre)){query1}。然后,如果有值,我运行初始查询。工作得很好,但如果我以后需要更多的输入搜索字段,我的搜索引擎会变得笨重。。。