PDO 不会将数据从 mysql 返回到 jQuery AJAX [关闭]

Posted

技术标签:

【中文标题】PDO 不会将数据从 mysql 返回到 jQuery AJAX [关闭]【英文标题】:PDO doesnt return data from mysql to jQuery AJAX [closed] 【发布时间】:2014-10-24 22:57:47 【问题描述】:

我正在开发一个 Web 应用程序来维护餐厅的管理,其功能如下:

显示所有订单的列表,以及点击一个订单时的具体数据 创建或删除订单 维护财务 等等……

首先我习惯了使用mysqli 扩展,并且正在使用这样的函数(使用return 语句):

function get_all_data_by_order_id($order_id) 
    $query = "SELECT customers.first_name,
                     customers.last_name,
                     customers.email_adress,
                     customers.customer_info,

                     orders.order_info,
                     orders.total_price,
                     orders.location,
                     orders.created

                     FROM customers
             INNER JOIN orders ON customers.id = orders.customer_id

             WHERE orders.id = $order_id";

    return $this->query($query);

现在我想用 PDO 尝试一下,这样我可以更轻松地使用准备好的语句。

我有这个 php 文件:

try 
    $connection = new PDO('mysql:host=localhost;dbname=broodjes-service', 'root', 'password');
    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    if (!empty($_GET['order_id'])) 
        $order_id = $_GET['order_id'];

        $query = "SELECT customers.first_name,
                         customers.last_name,
                         customers.email_adress,
                         customers.customer_info,

                         orders.order_info,
                         orders.total_price,
                         orders.location,
                         orders.created

                         FROM customers

                 INNER JOIN orders ON customers.id = orders.customer_id

                 WHERE orders.id = :order_id";

        $statement = $connection->prepare($query);
        $statement->bindParam(":order_id", $order_id, PDO::PARAM_INT);
        $statement->execute();
        $order_data = $statement->fetch(PDO::FETCH_ASSOC);

        $orderObject = array();
        $orderObject['header'] = mysqli_fetch_array($order_data);

        echo json_encode($orderObject);

        $connection = null;
    
 catch (PDOException $e) 
    echo $e->getMessage();
    die();

Wich 被这段 javascript 调用,让它看起来好像页面没有重新加载:

function select_order(order) 
    var item = $(order);
    if (!item.hasClass("selectedRow")) 
        if (!selectedOrderInformation.is(":visible")) 
            switchScreen(selectedOrderInformation, financeOverview);
        
        item.parent().find(".selectedRow").removeClass("selectedRow");
        item.addClass("selectedRow");
        selectedOrderInformation.html("loading......");
        $.ajax(
            url: "includes/functions/select-order.php",
            type: "get",
            dataType: 'json',
            data: order_id: item.attr("data-order-index"),
            success: function (data) 
                selectedOrderInformation.html('<h3>' + data['header']['first_name'] + '</h3>');                
        );
     else 
        console.log("DEBUG: Row is already selected");
    

问题

当我尝试在其中的列表中选择一个订单时,什么也没有发生。屏幕停留在“正在加载...”屏幕上。似乎它甚至没有执行查询。

问题

我怎样才能让我的 javascript 文件通过部署 mysql 数据库中的数据对 php 文件做出实际反应?

【问题讨论】:

您是否在控制台窗口中遇到任何错误? @VikasArora 不。虽然我没有注意到,但我正在记录它们。 您将 MySQL API 与 PDO 和mysqli_fetch_array 混合在一起;保持一致。 在 PHP 页面中 var_dump $order_data 得到什么? 【参考方案1】:

不要混合使用 PDO 和 MySQLi

由于您只想选择一行,请使用fetch()fetchAll()[0]

推荐方式:

$statement->execute();
$orderObject = array();
$orderObject['header'] = $statement->fetch();   //or: $statement->fetchAll()[0]
echo json_encode($orderObject);

【讨论】:

但首先,我也使用 JSON,但使用另一种获取数据的方式。那么我现在必须这样做是怎么回事?编辑:这不起作用,对不起。 通过指定dataType: 'json', 会导致jQuery 忽略响应的内容类型并将其解析为JSON。通过parseJSON 运行结果会将对象字符串化,尝试将结果解析为 JSON,并抛出错误。 好吧,删了,发现重要错误 @Bas "我有这个 php 文件:" - 它包含 mysqli_fetch_array 如果它不是您的实际代码的一部分,请将其从您的问题中删除并发布您实际上正在使用的代码。这让每个人都感到困惑。 @Fred-ii- 就像那样...不知道我不能使用 mysqli_fetch_array 函数,是的。那么这个答案就可以了。谢谢你:)

以上是关于PDO 不会将数据从 mysql 返回到 jQuery AJAX [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

MySQL与PDO [重复]

PHP-PDO:我如何将一些值返回到 javascript 中以在视图上呈现?

PDO 不返回任何结果,而 MySQL 命令行返回预期结果

如何从 MySQL 返回整数和数字列作为 PHP 中的整数和数字?

使用 PDO 从 php 页面将具有更多列的表单数据插入 mysql 数据库

PHP PDO mySQL 查询返回列名和整数