簡體   English   中英

PDO多項選擇查詢

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

要考慮的一些事情:

  • 您可能需要一個LEFT JOIN而不是一個INNER JOIN。 這取決於產品在價格表中是否始終有相應的記錄。
  • 我不確定您要使用LIMIT 1實現什么。您可能需要考慮和ORDER BY-除非返回結果的記錄並不重要。
  • 您應該考慮對變量$ productid和$ productquantity進行測試,以在拆分$ cartproduct之后驗證它們是否具有預期值。 如果一個是空/空白怎么辦?
  • 在嘗試以特定索引訪問結果數組之前,應測試結果。

例如:

if(isset($row['name']) && isset($row['price'])) {
   //echo your results
} else {
  //return an error
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM