簡體   English   中英

如何防止SQL搜索查詢返回列沒有值的行?

[英]How to prevent SQL search query from returning rows where columns have no value?

我有我的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的完整條件和清除代碼的單獨查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM