-1

我有一个无需刷新页面即可搜索的脚本。我正在尝试从旧连接转移mysql_connect到新PDO连接以使其更安全。我需要帮助更改我的 PDO 脚本,以便它与 post 函数一起使用。

我的 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 post 脚本一起工作。

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 回答