1

これが私のコードです

<?php
session_start();

include('config.php');
if(isset($_GET['search_word']))
{
    // echo $_GET['search_word'] . '<br />'; // debugging
    $search_word = $_GET['search_word'];
    $search_word = mysql_escape_string($search_word);
    $search_word_fix = str_replace(" ","%",$search_word);

    $query = "SELECT * FROM article WHERE article_title LIKE '%" . $search_word . "%' AND article_live = '1' ORDER BY article_id DESC";
    // echo $query . '<br />'; // debugging

    $sql = mysql_query($query);
    $count = mysql_num_rows($sql);
    // echo $count . '<br />'; // debugging
    // echo mysql_num_rows($sql) . '<br />'; // debugging
    if($count > 0)
    {
        while($row=mysql_fetch_array($sql))
        {
            $msg=$row['article_title'];
            $bold_word='<b>'.$search_word.'</b>';
            $final_msg = str_ireplace($search_word, $bold_word, $msg);

            echo $final_msg; 
        }
    }
    else
    {
        echo "No Results";
    }
}?>

誰かがそれに関する問題を見ることができますか?私はこのスクリプトで機能していないものを見つけることができず、しばらくの間それを見つめていました。「結果なし」のみがWHILEループに到達することはなく、デバッグのコメントを解除すると、カウントは空白になります。

4

1 に答える 1

3

空白を返すカウントは、クエリが何らかの理由で失敗したことを意味します。

  • データベースに正しく接続していますか?クエリの直後にmysql_error()を使用してみてください。

    $error_msg = mysql_error();
    
  • mysql_escape_string()の代わりにmysql_real_escape_string()を使用します-文字セットを尊重するため、UTF8の問題は発生しません

これを公に使用している場合は、バインドを使用して、PDOなどのライブラリを介したSQLインジェクションの可能性を排除する方法について学習することをお勧めします。

これは、PDOが重要である理由を説明する非常に優れたチュートリアル/入門書です。

于 2010-07-25T16:13:27.040 に答える