【问题标题】:Foreach not displaying the ResultsForeach 不显示结果
【发布时间】:2014-06-10 20:25:36
【问题描述】:

您好,我使用以下查询需要从此查询中获取 order_idproduct_id, 好吧,当我在 phpmyadmin 中运行查询时,结果会显示出来。

global $wpdb;

    $sql = "SELECT oi.order_id, p.ID as product_id, p.post_title, p.post_author as seller_id,
                oim2.meta_value as order_total, terms.name as order_status
            FROM {$wpdb->prefix}woocommerce_order_items oi
            LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim ON oim.order_item_id = oi.order_item_id
            LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta oim2 ON oim2.order_item_id = oi.order_item_id
            LEFT JOIN $wpdb->posts p ON oim.meta_value = p.ID
            LEFT JOIN {$wpdb->term_relationships} rel ON oi.order_id = rel.object_id
            LEFT JOIN {$wpdb->term_taxonomy} tax ON rel.term_taxonomy_id = tax.term_taxonomy_id
            LEFT JOIN {$wpdb->terms} terms ON tax.term_id = terms.term_id
            WHERE
                oim.meta_key = '_product_id' AND
                oim2.meta_key = '_line_total'
            GROUP BY oi.order_id";

    $orders = $wpdb->get_results( $sql );

    if ( $orders ) {
        foreach ($orders as $order) {

            $result=customFunction(**$order->order_id,$order->product_id,$order->seller_id**);

          }

问题是 $order->order_id$order->product_id 值没有被传递给函数,而只有 $order->seller_id 被传递。但在 phpmyadmin 中,所有三个变量的值都存在。

试过了

echo $orders[product_id] ;
echo   $orders[order_id] ;
echo   $orders[seller_id];

小屋只有echo $orders[seller_id]; 显示值。

数组结构如下:

Array (
    [0] => stdClass Object (
        [order_id] => 2774
        [product_id] => 2531
        [post_title] => Klassic Koalas Mug
        [seller_id] => 3
        [order_total] => 12
        [order_status] => cancelled
    )
    [1] => stdClass Object (
        [order_id] => 2869
        [product_id] => 2622
        [post_title] => Mug, Aqua
        [seller_id] => 1
        [order_total] => 1
        [order_status] => on-hold
    )

【问题讨论】:

  • 你的 echo 语句肯定行不通。 $orders 将是一个集合,在这种情况下是一个对象数组。转储 $orders 看看你会得到什么。
  • 函数调用中的 2 ** 是什么意思?你在哪里编码你说不起作用的回声??
  • $result=customFunction($order->order_id,$order->product_id,$order->seller_id); 2** 选择了 echo 并按下 cntrl +B 使其变为粗体。但它没有用。

标签: php mysql foreach wordpress


【解决方案1】:

我会将此放在评论中,但我没有足够的声誉。做:

var_dump($orders)

看看里面有什么。也许它们被提取为“oi.order_id”。

【讨论】:

    【解决方案2】:

    不确定product_id,但似乎order_id 没有出现,因为您没有设置order_id 的别名。所以拿这个:

    SELECT oi.order_id,
    

    然后改成这个

    SELECT oi.order_id as order_id,
    

    过去转储$orders 以查看整体结构如下:

    echo '<pre>';
    print_r($orders);
    echo '</pre>';
    

    【讨论】:

      【解决方案3】:

      让我们先调试一下,var_dump 是你的朋友!试试:

      $orders = $wpdb->get_results( $sql );
      var_dump($orders); die();
      

      现在,添加 var_dump 后,检查结果,如果 order_id 和 product_id 仍然没有结果,可能是 DB 问题?然后你必须先修复你的数据库。

      【讨论】: