【问题标题】:Moving from mysql_connect to PDO on my site [closed]在我的网站上从 mysql_connect 移动到 PDO [关闭]
【发布时间】:2026-01-29 17:50:02
【问题描述】:

我有一个脚本可以在不刷新页面的情况下进行搜索。我正在尝试从旧的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 脚本一起工作。

【问题讨论】:

  • 究竟什么不起作用?
  • 那么问题出在哪里?我不明白。看,你就是那个,你看到输出,差异,数组。请尝试解释您无法解决的实际问题。
  • 一切正常,我只是想从 mysql_connect 转移到 PDO 连接,更改脚本。第一个 search.php 文件有效。我正在尝试将那个交换到 pdo 连接之一。
  • 帖子没有显示任何内容。那是我的问题
  • @sw0o0sh 这已经比您之前与我们分享的要多得多了 :)。请展示一些调试工作。

标签: php jquery mysql pdo


【解决方案1】:

我就是这样做的。

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

【讨论】:

    【解决方案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");
    

    【讨论】: