0

可能重复:
如何防止 PHP 中的 SQL 注入?

如果我在搜索栏上运行下面的查询,为什么我的搜索查询不起作用,它没有返回任何结果,我有一个表格类别,我想从中选择category_title and category_description然后将其显示为我的结果,我有一个技术类别及其描述,但是当我运行下面的查询时显示没有结果

<?php
$k     = $_GET['k'];
$terms = explode(" ", $k);
echo $terms;

foreach ($terms as $each) {
    $i = "";
    $i++;
    $query = "";
    if ($i == 1)

        $query .= "keywords like '%$each%'";
    else
        $query .= "OR keywords like '%$each%'";
}

$connect = mysql_connect("localhost", "root", "limo");
if (!$connect) {
    die(mysql_error());
}
//Selecting database
$select_db = mysql_select_db("forumShh", $connect);
if (!$select_db) {
    die(mysql_error());
}
$query   = mysql_query($query);
$numrows = mysql_num_rows($query);

if ($numrows > 0) {
    while ($row = mysql_fetch_assoc($query)) {
        $id          = $row['id'];
        $title       = $row['category_title'];
        $description = $row['category_description'];
        echo "<a href='view_category.php?cid=" . $id . "' class='cat_links'>" . $title . " - <font size='-1'>" . $description . "</font></a>";
    }

} else
    echo "No results found for \"<b>$k</b>\"";
?>
4

1 回答 1

0

如果您的表结构包含 atitle和 adescription那么为什么要LIKE在名为 的列上使用运算符keywords

您应该有一个如下所示的最终 SQL 查询:

SELECT    *
    FROM  categories
    WHERE (`title` LIKE '%$keyword_1%' OR `description` LIKE '%$keyword_1%')
    OR    (`title` LIKE '%$keyword_2%' OR `description` LIKE '%$keyword_2%')
    OR    (`title` LIKE '%$keyword_3%' OR `description` LIKE '%$keyword_3%');

你的可能看起来像这样:

SELECT    *
    FROM  categories
    WHERE `keywords` LIKE '%$keyword_1%'
    OR    `keywords` LIKE '%$keyword_2%'
    OR    `keywords` LIKE '%$keyword_3%';

如果keywords您的表中没有指定列,则查询将失败并出现错误。

于 2012-12-27T23:42:21.927 回答