【问题标题】:Simple loop not displaying data [duplicate]简单循环不显示数据[重复]
【发布时间】:2018-12-11 09:15:29
【问题描述】:

这让我很困惑.. 简单的获取和循环不显示任何数据 表中有数据显示结果循环外返回数据

$dbc = mysqli_connect($dbh, $dbu, $dbp, $dbn);
$query = mysqli_query($dbc,"SELECT * FROM `products`");
$res = mysqli_fetch_assoc($query);
$rows = array();
do {
    $rows[] = $res['product'];

}while($res = mysqli_fetch_assoc($query)) ;
$data = json_encode($rows);
echo $data;
echo mysqli_error($dbc);

添加:

返回数组中的数据

<pre>Array
(
    [ID] => 1
    [list_name] => Dry Fruits
    [cat] => Dry Fruits and Nuts
    [item_code] => 1049
    [pack_style] => 106
    [packstyle_active] => Y
    [style_desc] => Stabilo250
    [system_wt] => 0.25
    [weight_desc] => 250gm
    [declared_weight] => 0.25
    [declared_weight_desc] => 250gm
    [uom] => gm
    [qty_in_case] => 1
    [case_size] => 1 x 250gm
    [product] => Almond Sliced
    [weight_code] => 126
    [qty_code] => 00
    [product_code] => 1049-106-126-00
    [barcode] => 502185878567
    [barcode13] => 5021858785678
    [sequence_no] => 78567
    [sage_code] => 104978567
    [active] => N
    [allergen] => Y
    [origin] => Various
    [density] => 0
    [processtype] => PT32
    [processed_by] => FGS
    [Industrial] => N
    [Catering] => N
    [RetailEthnic] => Y
    [RetailMainstream] => N
    [Website] => N
    [Special] => N
    [zohoitemcode] => 1540890000001353073
)

所以我认为这是 json_encode 的问题.. 可能

    print_r($rows) 
    Array
   (
    [0] => Almond Sliced
    [1] => Almond Sliced
    [2] => Almond Sliced
    [3] => Almond Sliced
    [4] => Almond Sliced
    [5] => Almond Sliced
    [6] => Almond Sliced
    [7] => Almond Sliced
    [8] => Almond Sliced
    [9] => Almond Sliced
    [10] => Almond Sliced
    [11] => Almond Sliced
    [12] => Almond Sliced
    [13] => Almond Sliced
    [14] => Almond Sliced
    [15] => Almond Sliced
    )

产品记录超过36000条

【问题讨论】:

  • 还有更多行要获取吗? var_dump($query) 是什么?
  • 你的代码没问题。你能显示你想要的输出吗?
  • $res 确实存在于循环中,因为它是在第 3 行中声明的。
  • $rows[] = $res['product'] 不创建数字索引吗?您的 print_r($rows) 输出看起来不像那样。 print_r 怎么会是你循环的结果?
  • 对不起,这是有人要求的输出形式,我只是忘记删除 print_r 参考

标签: php


【解决方案1】:

这似乎是一个奇怪的编码问题。在 while 循环中添加了一行以强制编码为 UTF-8。

$dbc = mysqli_connect($dbh, $dbu, $dbp, $dbn);
$query = "SELECT * FROM `products`";
$stmt = $dbc->prepare($query);
$stmt->execute();
$results = $stmt->get_result();

while($res = $results->fetch_assoc()){

  $rows[] = mb_convert_encoding($res['product'], 'UTF-8', 'UTF-8');

}

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

$data = json_encode($rows);
echo $data;

echo mysqli_error($dbc);

【讨论】:

  • 还是一样的@Joseph_J
  • 您的查询似乎只返回 1 个产品。
  • 是的,这很烦人,因为有 36000 条记录如果我做一个简单的 echo $res['product'];在 do while 循环中,它会将它们全部返回
  • 查看更新的答案。
  • 干杯 :) 愚蠢的编码问题..
【解决方案2】:

尝试将循环更改为以下内容:

foreach($res as $val) {
    $rows[] = $val['product'];
}

此外,如果它仍然不起作用。那么:

echo "<pre>";
print_($res);
die(); 

请发布输出。

编辑:1

你不需要 foreach 循环。

你可以直接做:

$data = json_encode($res);
echo $data;

【讨论】:

  • 收到警告:第 21 行中的非法字符串偏移 'product' 就是 $rows[] = $val['product'];线。现在将尝试您的最后建议
  • 您得到它是因为您的数组中没有名为 product 的键。
  • 刚刚添加了您要求的输出
  • 您是否尝试过我在回答中更新的更改?
  • 是的,您提出的最后一个建议只输出了 1 个产品
猜你喜欢
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
  • 2013-03-29
  • 2018-09-30
相关资源
最近更新 更多