-1

ページを更新せずに検索するスクリプトがあります。より安全にするために、古い接続mysql_connectから新しい接続に移行しようとしています。PDOpost関数で動作するようにPDOスクリプトを変更するのに助けが必要です。

私のHTMLスクリプト:

<script type="text/javascript">
    $(document).ready(function(){
        $(".search").click(function(){
            $.post("search.php", { keywords: $(".keywords").val() }, function(data){
                $("div#content").empty()
                $.each(data, function(){
                    $("div#content").append("- <a href='#?id=" + this.id + "'>" + this.title + "</a><br>");
                });
            }, "json");
        });
    });
</script>
</head>
<body>
<input type="text" name="search" class="keywords">
<input type="submit" name="submit" class="search">
<div id="content">
</div>

そして、これは私の作業中の検索スクリプトです。

<?php
$link = mysql_connect("localhost","root","");
mysql_select_db("pirateconnection", $link);

$keywords = mysql_real_escape_string( $_POST["keywords"] );

$query = mysql_query("SELECT * FROM media WHERE title LIKE '%". $keywords ."%'");

$arr = array();
while( $row = mysql_fetch_array ( $query ) )
{
    $arr[] = array( "id" => $row["id"], "title" => $row["title"]);
}

echo json_encode( $arr );
?>

PDO接続を使用して新しいスクリプトを作成しました。

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

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

$keywords = (isset($_POST['keywords']) === true) ? $_POST['keywords'] : '';
$query->bindValue(':keywords', '%' . $keywords . '%', PDO::PARAM_STR);

try {
    $query->execute();

    $rows = $query->fetchAll(PDO::FETCH_ASSOC);
    echo '<pre>', print_r($rows, true), '</pre>';
} catch(PDOException $e) {
    die($e->getMessage());
}

?>

次に、PDOスクリプトをhtml/jquery投稿スクリプトで動作させる必要があります。

4

2 に答える 2

2

try...catch私の意見では、同じjQueryを機能させるには、セグメントを次のものに置き換える必要があります

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

また、準備クエリを変更して、以下も含めidます。

$query = $db->prepare("SELECT `media`.`id`, `media`.`title` FROM `media` WHERE `media`.`title` LIKE :keywords");
于 2013-02-26T23:59:35.460 に答える
0

これが私のやり方です。

    $query->setFetchMode(PDO::FETCH_ASSOC);
    $query->execute();
    $rows = array();
    while($row = $query->fetch()) {
     $rows[] = $row;
}
echo json_encode($rows);
exit;
}
于 2013-02-27T00:08:49.270 に答える