我根据您在下面的评论中学到的内容更新了我的原帖。这是一个比我原先想象的简单得多的过程。
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
答案 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
希望这足以让你自己进一步学习:)。