1

我正在尝试使用 PDO 创建购物。到目前为止,我已经以较旧的方式完成了它,并且过去 6 天我一直在尝试在 PDO 中执行此操作。请有人帮忙。我将如何做到这一点 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"];
        }
4

3 回答 3

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"];
}
于 2013-05-30T10:27:36.333 回答
0

事实上,您当前的代码效率很低。而不是运行多个查询,只运行一个来获取所有项目

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数组中的所有项目,并且可以在其他地方迭代它(可能在模板中)

您可以在标签 wiki中看到 dbconnect() 的正确代码

于 2013-05-30T08:35:09.967 回答
-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();
} 

您可以在此处阅读有关 $dsn 的 MySQL 格式的文档: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"];
    }
}

如果这导致任何错误,它将引发异常,因为我在创建连接后立即设置了该属性。

于 2013-05-30T00:27:43.017 回答