改进 PHP 数组以在 AJAX 上使用

Posted

技术标签:

【中文标题】改进 PHP 数组以在 AJAX 上使用【英文标题】:Improve PHP Array to use on AJAX 【发布时间】:2014-09-16 14:18:35 【问题描述】:

我使用 AJAX 创建了一个 php 文件来填充页面,但我找不到解决问题的方法。

这是我的 PHP 及其输出:

$result = mysql_query("SELECT id, product, picture FROM table1 ORDER BY id DESC");

$products = array();
while($product = mysql_fetch_array($result, MYSQL_ASSOC)) 
    $products[] = ($product);


$json = json_encode($products);
$output = isset($_GET['callback']) ? "$_GET['callback']($json)" : $json;
echo $output;

这将打印:

["id":"5","product":"product5","picture":"picture5.jpg",
"id":"4","product":"product4","picture":"picture4.jpg",
"id":"3","product":"product3","picture":"picture3.jpg",
"id":"2","product":"product2","picture":"picture2.jpg",
"id":"1","product":"product1","picture":"picture1.jpg"]

我想使用另一个查询在此输出上添加字段“In_Stock”以输出如下内容:

["id":"5","product":"product5","picture":"picture5.jpg","in_stock":"yes",
"id":"4","product":"product4","picture":"picture4.jpg","in_stock":"no",
"id":"3","product":"product3","picture":"picture3.jpg","in_stock":"yes",
"id":"2","product":"product2","picture":"picture2.jpg","in_stock":"yes",
"id":"1","product":"product1","picture":"picture1.jpg","in_stock":"no"]

我的问题是:是否可以使用数组的值(在第一个 While 内)在另一个表中进行搜索,将此值添加到 products 数组并在上面的输出中保持相同的“布局”?

编辑:

这些是我的桌子:

TABLE1

id
product
picture

第二个

TABLE2

id  
user
product_id
in_stock

同一产品可能有不同的库存,具体取决于用户...

【问题讨论】:

你问的是可能的,但为什么不检索SQL查询中的所有数据呢? 是的,您可以在 while 循环中对另一个表运行单个查询,然后从新查询中手动添加数组键。不过,加入原始查询会更有效。 如果股票在另一个表中,您可以使用 JOIN 子句:dev.mysql.com/doc/refman/5.0/en/join.html 【参考方案1】:

是的,您可以执行另一个查询,但更改第一个查询以包含您需要的所有数据可能更有意义,如下所示:

 mysql_query("SELECT table1.id, table1.product, table1.picture, table2.in_stock 
              FROM table1 
              LEFT JOIN table2 ON (table1.id = table2.product_id 
              AND table2.user = " . intval($_SESSION['user']) . ") 
              ORDER BY table1.id DESC");

编辑:根据您的评论从会话中添加到用户中。我使用了intval,因为我假设您使用整数作为用户的 id,并且我不知道 $_SESSION 值是如何设置的 - 如果它来自用户输入,那么它应该被转义。

附带说明,mysql_query 已弃用,您应该查看 mysqli 和准备好的语句。

【讨论】:

抱歉,我忘了说第二个查询将使用 Sessions 中的动态值,因此根据登录的用户,第二个表对于同一产品具有不同的值。例如:用户:user1,产品:product.id,In_Stock:是。 显示表结构,您可以像在第二个查询中一样轻松地在第一个查询中使用会话中的值。 谢谢,现在它工作了,如果搜索到的产品在 Table2 上没有引用,我只需要隐藏出现的 NULL 输出。我尝试使用 - AND table2.in_stock = 'yes')- 但输出在产品上返回 Null 而对 Table2 没有任何参考。 在这种情况下,将LEFT JOIN 更改为INNER JOIN,然后如果它在table2 中为null,则根本不会出现在结果中

以上是关于改进 PHP 数组以在 AJAX 上使用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 和 Ajax 将数组传递给 Javascript?

使用 JQuery 和 AJAX 将数据提交到另一个页面上的数组

使用 Ajax 将数组发送到 PHP 脚本

使用 Ajax 发布数组但 PHP 获取字符串

使用ajax将javascript数组发送到代码后面(c#)

使用 PHP 将数组传递给 Ajax