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と aが含まれている場合description、なぜ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 に答える