2013-02-26 9 views
-1

我有一個腳本,無需刷新頁面即可搜索。我試圖從舊的mysql_connect轉移到新的PDO連接,以使其更安全。我需要幫助來更改我的PDO腳本,以便它可以與post函數一起使用。從mysql_connect移動到我的網站上的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()); 
} 

?> 

現在我需要使用html/jquery post腳本獲得PDO腳本。

+0

什麼不工作,究竟是什麼? – Nick 2013-02-26 23:45:46

+2

那麼問題是什麼?我不明白。看,你是那裏的人,你看到輸出,差異,陣列。請嘗試解釋您無法解決的實際問題。 – kapa 2013-02-26 23:45:53

+0

什麼不行? – 2013-02-26 23:46:01

回答

2

在我看來,你需要的是與相同的jQuery以下替換try...catch段工作

$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"); 
0

這就是我的做法。

$query->setFetchMode(PDO::FETCH_ASSOC); 
    $query->execute(); 
    $rows = array(); 
    while($row = $query->fetch()) { 
    $rows[] = $row; 
} 
echo json_encode($rows); 
exit; 
}