-1

スクリプトをFiddleにアップロードしました。ここで見つけることができます:http://jsfiddle.net/XdPk5/1/

行数=0や空の投稿が送信された場合などのエラーを追加しようとしています。

javascript:

        $(document).ready(function(){
            $(".search").click(function(){
                $.post(
                    "search.php", 
                    { keywords: $(".keywords").val() }, 
                      function(data) {
                        $("div#search").empty();
                        obj = JSON.parse(data);
                        $("div#search").append(obj.id + " " + obj.title);
                      },
                    "json"
                );
            });
        });

php:

<?php
$db = new PDO('mysql:host=localhost;dbname=db','root','');

$keywords = (isset($_POST['keywords']) === true) ? $_POST['keywords'] : '';
if (empty($keywords) === true) {
    echo json_encode( "error" );

} else {
    $query = $db->prepare("SELECT `media`.`id`, `media`.`title` FROM `media` WHERE `media`.`title` LIKE :keywords");

    if ($query->rowCount() == 0) {
        echo 'empty';

    } else {
        $query->bindValue(':keywords', '%' . $keywords . '%', PDO::PARAM_STR);

        $arr = array();
        $query->execute();
        while( $row = $query->fetch(PDO::FETCH_ASSOC) ) {
            $arr[] = array( "id" => $row["id"], "title" => $row["title"]);
        }
        echo json_encode( $arr );
    }
}

?>
4

1 に答える 1

1

これは間違っています:

$query = $db->prepare("SELECT `media`.`id`, `media`.`title` FROM `media` WHERE `media`.`title` LIKE :keywords");

if ($query->rowCount() == 0) {
    echo 'empty';

} else {
    $query->bindValue(':keywords', '%' . $keywords . '%', PDO::PARAM_STR);
  • rowCountクエリを実行する前にありません。
  • OR複数の単語が入力されている場合は、個々のキーワードを追加し、またはを使用してそれらをチェーン化するSQLクエリを作成する必要がありますAND

また、あなたが行う場所では、echo 'empty';有効なjsonを返していません。

javascriptでは、それが有効なオプションではないという意味ではdataType: "json"なく、おそらく意味します。"json"

于 2013-02-28T01:20:29.443 に答える