PHP domPDF - 显示数组中的行

PHP domPDF - displaying rows from array

我可能真的忽略了一些简单的事情,但这行不通,我想这只是我在尝试拆分数组时的愚蠢行为。

基本上下面只是获取ID号,然后从数据库中选择数据。这工作正常,最后打印 PDF,但上面没有数据。

如果我将 json_decode 更改为 json_encode 那么它只会给我第一部分数组(但显然​​它没有被解码,所以在不应该的地方有一些括号和斜线)。

但是我无法让它显示所有行。谁能指出我哪里出错了?

<?php
//etc etc
$idgg = $_GET['idgg'];
$query = "select * from `all_quotes` where quote_id='1493293451_1'";
if ($result = mysqli_query($link2, $query)) {
while ($row = mysqli_fetch_assoc($result)) {
$data = $row["data"];
$qdata = json_decode($data);
 foreach($qdata as $trow){
    $prods =  explode('|', $trow);
    $rowall = "<tr><td>$prods[0]</td><td>$prods[1]</td><td>$prods[3]</td>
    <td>$prods[2]</td></tr>";
   }
 }
}
require_once '/dompdf/autoload.inc.php';
use Dompdf\Dompdf;
$dompdf = new Dompdf();
$dompdf->loadHtml('<table>'.$rowall.'</table>');
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$dompdf->stream("test.pdf");
?>

编辑

数组看起来像:

["ABC|Lots of description here|31.12|ETC","DEF|Even more....|30.57|ETC"].

此外,我注意到如果我不使用 $_GET(即只是将 id 输入到代码中),那么我会得到第一个结果,但不会得到其余结果.为什么这会有什么不同?!

提前致谢...


更新了代码,添加了不同的 mysqli 结构。上面给了我数据的第一行(即数组的第一部分)

尝试 首先你应该尝试 link 并检查你的 json 对象是否正确

检查 json 对象是什么,这样您就知道您在处理什么

通常是 json 字符串,当传递给 json_decode 时,它将 return 对象 作为 for.e.g 考虑

 $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
 var_dump(json_decode($json));
/* output
object(stdClass)#1 (5) {
 ["a"] => int(1)
 ["b"] => int(2)
 ["c"] => int(3)
 ["d"] => int(4)
 ["e"] => int(5)
} */

var_dump(json_decode($json, true));
/* output
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}*/ 

这个return关联数组你可以用。

否则我怀疑数据可能以您可以使用的序列化格式存储 unserialize 函数

您即将做对了。您修复了 mysqli_fetch_assoc() 问题,但是当您这样做时,您带回了覆盖生成的字符串的早期错误。据我所知,正确的循环应该是:

if ($result = mysqli_query($link2, $query)) {
    $rowall = ""; // Start out with an empty string

    while ($row = mysqli_fetch_assoc($result)) {
        $data  = $row["data"];
        $qdata = json_decode($data);

        foreach($qdata as $trow){
            $prods =  explode('|', $trow);
            // Here you were overwriting the string in each iteration, since you only used "=", not ".="
            $rowall .= "<tr><td>$prods[0]</td><td>$prods[1]</td><td>$prods[3]</td>
<td>$prods[2]</td></tr>";
        }
    }
}

如果这仍然只给出一行,那么 运行 直接在您的数据库中查询 SQL 并确保它确实 return 不止一行。