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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
PHP-PDO:我如何将一些值返回到 javascript 中以在视图上呈现?
如何从 MySQL 返回整数和数字列作为 PHP 中的整数和数字?