[英]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.