【问题标题】:PDO doesnt return data from mysql to jQuery AJAX [closed]PDO 不会将数据从 mysql 返回到 jQuery AJAX [关闭]
【发布时间】: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 得到什么?

标签: php jquery mysql ajax pdo


【解决方案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 函数,是的。那么这个答案就可以了。谢谢你:)
猜你喜欢
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 2014-10-25
  • 2019-02-22
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
相关资源
最近更新 更多