我需要嵌套2个数组,以便我可以回显订单标题以及订单项详细信息

时间:2017-03-28 20:43:02

标签: php arrays mysqli pdo

我根据您在下面的评论中学到的内容更新了我的原帖。这是一个比我原先想象的简单得多的过程。

    require '../database.php';

    $pdo = Database::connect();
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT * FROM Orders WHERE id = 430";
            $q = $pdo->prepare($sql);
            $q->execute(array($id));
            $data = $q->fetch(PDO::FETCH_ASSOC);

            echo    'Order Num: ' . $data['id'] . '<br>';

    $sql = "SELECT  * FROM Order_items 
            JOIN    Parts ON Parts.id = Order_Items.part_id 
            WHERE   Order_Items.orders_id = 430";

            $q = $pdo->prepare($sql);
            $q->execute(array($line_item_id));
            $data = $q->fetch(PDO::FETCH_ASSOC);

            while ($data = $q->fetch(PDO::FETCH_ASSOC)) 
            {
                echo '- ' . $data['part_num'] . $data['qty'] . "<br>";
            }

     Database::disconnect();

不幸的是,只有我的第一个查询才产生结果。第二个查询产生以下错误日志:&#34;未找到基表或视图:1146表&#39; Order_items&#39;不存在&#34;但我期待以下结果。

查询1的预期结果:      订单编号:430

查询2的预期结果:

- Screws 400
- Plates 35
- Clips 37
- Poles 7
- Zip ties 45

1 个答案:

答案 0 :(得分:0)

现在,我了解你的来源,让我们解释一下。

1.PDO和mysqli是两种访问数据库的方式;他们基本上做同样的事情,但符号是不同的。

2.Arrays是具有多个&#34;隔室的变量&#34;。最典型的阵列具有由数字索引标识的隔间,如:

<p style="margin-left: 75px; max-width: 750px;">
  <span style="float: left">This is a test.</span>
  <span style="float: right">[Rare photograph]</span>
</p>

等。但这需要我们记住哪个数字索引意味着什么。所以在PHP中有关联数组,它允许使用文本字符串作为索引,并用于获取SQL查询结果。

3.声明

$array[0] = 'OR12345'; //order number
$array[1] = '2017-03-15'; //order date
$array[2] = 23; //id of a person/customer placing the order

$data = $q->fetch(PDO::FETCH_ASSOC)

做同样的事情:使用字段名作为索引,将查询中的记录(行)放入数组中。通过这种方式,可以轻松使用数据,因为您可以使用字段名称(稍微用它们)来显示或操作字段值。

4.The

$row = $result->fetch_assoc()

做两件事。它会检查 是否还要从查询结果中获取一行。虽然有一个 - 它将它放入数组$行供你使用,并重复({和}之间的所有东西)。

因此,您获取行,以您想要的任何形式显示结果,然后循环以获取另一行。如果没有要获取的行 - 循环结束。

5.您应该避免在查询中的FROM子句中使用逗号。只有当连接表的字段明显(命名相同)时才能使用这种表示法,但无论如何这都是不好的做法。应明确指定表之间的连接。在第一个查询中,您只需要标题,并且示例中不需要其他表,因此您应该只有

while ($row = $result->fetch_assoc())

而在第二个查询中我了解到你有一个表零件,其中包含可以订购的各个零件的描述?如果是这样,那么第二个查询应该有:

SELECT *
FROM Orders
WHERE Orders.Order_ID = 12345

如果您的订单表中有供应商ID Supplier_ID 的字段,则指向供应商表,以及下订单的人员的ID Customer_ID ,指向Customers表,然后第一个查询将如下所示:

SELECT *
FROM Order_items
JOIN Parts ON Parts.ID = Order_Items.Part_ID
WHEERE Order_Items.Order_ID = 12345

希望这足以让你自己进一步学习:)。