2013-05-29 49 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"]; 
}