[英]PDO multiple select queries
我正在尝试从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>';
行名称来自产品表,名称价格来自价格表。 这是我得到的错误:
注意:未定义的索引:第15行的/var/www/html/design2/pages/cart.php中的价格
我确定查询有效。 谁能告诉我我在做什么错?
由于查询的结构方式,您将收到未定义的索引。 你有:
SELECT name FROM products WHERE ID= :ID LIMIT 1; SELECT price FROM prices WHERE productid = :ID AND quantity = :quantity LIMIT 1
该结构可返回2个结果集。 您在这里获取第一个结果集:
$row = $result->fetch();
但是然后您尝试访问该结果集中不存在的$ row ['price']。 该结果集只是第一个SELECT的结果。 如果仅使用var_dump($ 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;
如果您无法将查询合并为一个查询,则应遍历结果集并访问相关的$ row索引。 看起来像:
while($row = $result->fetch()) {
if(isset($row['name'])) {
//do something
} else if(isset($row['price'])) {
//do something else
}
}
要考虑的一些事情:
例如:
if(isset($row['name']) && isset($row['price'])) {
//echo your results
} else {
//return an error
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.