2013-05-29 52 views
1

我正嘗試使用PDO創建購物。到目前爲止,我已經做到了這一點,並且我一直試圖在過去6天內在PDO中做到這一點。請有人幫忙。我該怎麼做它PDO將Mysql更改爲PDO

dbconnect(); 
    $i = 0; 
    foreach ($_SESSION["cart_array"] as $each_item) { 
     $item_id = $each_item['item_id']; 
     $sql = mysql_query("SELECT * FROM product WHERE ID='$item_id' LIMIT 1"); 
     while ($row = mysql_fetch_array($sql)) { 
      $product_name = $row["Name"]; 
      $price = $row["Cost"]; 
      $details = $row["Description"]; 
     } 
+0

嘗試閱讀官方PDO文檔並注意示例。你必須做的唯一重大改變就是你在MySQL查詢中使用參數的方式。 – ramonovski

+0

你是說你想讓我們重寫代碼來爲你使用PDO嗎? –

+0

沒有爆炸,我只是想知道如何寫$ sql = mysql_query(「選擇*從產品WHERE ID ='$ item_id'LIMIT 1」); 但包括dbconnect(); –

回答

-1

猜測你的dbconnect()函數包含代碼來創建一個連接到數據庫。以下是如何建立一個良好的PDO連接:

try { 
    $pdo = new PDO($dsn, $user, $password); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); 
} catch (PDOException $e) { 
    echo 'Connection failed: ' . $e->getMessage(); 
} 

你可以閱讀上的MySQL格式DSN $此文檔:http://www.php.net/manual/en/ref.pdo-mysql.php

那麼你的代碼的其他部分將是這樣的:

foreach ($_SESSION["cart_array"] as $each_item) { 
    $item_id = $each_item["item_id"]; 
    $sql = "SELECT * FROM Hair_category WHERE Hair_ID=:item_id LIMIT 1"); 
    $stmt = $pdo->prepare($sql); 
    $stmt->execute(array(":item_id"=>$item_id)); 
    while ($row = $stmt->fetch()) { 
     $product_name = $row["Name"]; 
     $price = $row["Start_Cost"]; 
     $details = $row["Brief_Description"]; 
    } 
} 

如果這會導致任何錯誤,它會拋出一個異常,因爲我在創建連接後立即設置該屬性。

+0

匿名downvoter:請解釋你爲什麼認爲這個答案是錯誤或不恰當的。也許我可以改進它。 –

0

事實上,您目前的代碼效率很低。而不是運行幾個查詢的,只運行一個以獲取DBCONNECT所有項目

dbconnect(); 
if($_SESSION["cart_array"]) { 
    // that's quite tricky part. 
    // have to create a string of placeholders like ?,?,? 
    $in = str_repeat('?,', count($_SESSION["cart_array"]) - 1) . '?'; 
    // the rest is quite simple: 
    $sql = "SELECT * FROM Hair_category WHERE Hair_ID= IN($in)"; 
    $stm = $pdo->prepare($sql); 
    $stm->execute($_SESSION["cart_array"]); 
    $data = $stm->fetchAll(); 
} 

現在,你必須在$data數組中的所有項目,也可以在其他地方(可能在一個模板)迭代它

正確的代碼( )你可以看到在tag wiki

1

我這樣做,它的工作。感謝大家的幫助

$total_cart_items = count($_SESSION["cart_array"]); 
dbconnect(); 
foreach ($_SESSION["cart_array"] as $each_item) { 
$item_id = $each_item['item_id']; 
$stmt = $conn->prepare("SELECT * FROM product WHERE pid=:id"); 
$stmt->bindParam('id',$item_id); 
$stmt->execute(); 
$row = $stmt->fetch(PDO::FETCH_ASSOC); 
$product_name = $row["Name"]; 
$price = $row["Cost"]; 
$details = $row["Description"]; 
}