我正试图从2个表中获取行。第一个查询有效。但第二个没有。这是我的代码:
echo '<table width="100%">';
echo '<tr><td>Product</td><td>Quantity</td><td>Price</td><td>Remove</td></tr>';
foreach ($_SESSION['cart'] as $key => $cartproduct) {
list($productid, $productquantity) = split("\|", $cartproduct, 2);
global $db;
$result = $db->prepare('SELECT name FROM products WHERE ID= :ID LIMIT 1; SELECT price FROM prices WHERE productid = :ID AND quantity = :quantity LIMIT 1');
$result->bindParam(':ID', $productid);
$result->bindParam(':quantity', $productquantity);
$result->execute();
$row = $result->fetch();
if($result->RowCount() == 1){
echo '<tr><td>' . $row['name'] . '</td><td>' . $productquantity . '</td><td>' . $row['price'] . '</td><td><a href="?page=cart&removeproduct=' . $key . '">Remove</a></td></tr>'; //LINE15
}else{
unset($_SESSION['cart'][$key]);
}
}
echo '</table>';
行名称来自products表,名称价格来自price表。这是我得到的错误:
注意:未定义的索引:第15行的/var/www/html/design2/pages/cart.php中的价格
我确信查询正常。谁能告诉我我做错了什么?
答案 0 :(得分:0)
由于查询的结构方式,您正在接收未定义的索引。你有:
startService()
这结构为返回2个结果集。您在此处获取第一个结果集:
SELECT name FROM products WHERE ID= :ID LIMIT 1; SELECT price FROM prices WHERE productid = :ID AND quantity = :quantity LIMIT 1
但是,您尝试访问该结果集中不存在的$ row [&#39; price&#39;]。该结果集仅是第一个SELECT的结果。如果只是var_dump($ row),你可以看到这个,看看你的结果集是什么样的。
看起来您可以组合查询,以便获得一个结果集:
$row = $result->fetch();
如果您无法将查询合并为一个,那么您应该迭代结果集并访问相关的$ row索引。这看起来像是:
SELECT p.name, pp.price FROM products p
INNER JOIN prices pp ON p.ID = pp.productid
WHERE p.ID= :ID AND pp.quantity = :quantity
LIMIT 1;
需要考虑的一些事项:
例如:
while($row = $result->fetch()) {
if(isset($row['name'])) {
//do something
} else if(isset($row['price'])) {
//do something else
}
}