Php 将Mysql更改为PDO

Php 将Mysql更改为PDO,php,pdo,echo,session-variables,Php,Pdo,Echo,Session Variables,我正在尝试使用PDO创建一个购物网站。到目前为止,我已经用老方法做了,在过去的6天里,我一直在尝试在PDO中做这件事。请找个人帮忙。我该怎么做呢 dbconnect(); $i = 0; foreach ($_SESSION["cart_array"] as $each_item) { $item_id = $each_item['item_id']; $sql = mysql_query("SELECT * FROM product WHER

我正在尝试使用PDO创建一个购物网站。到目前为止,我已经用老方法做了,在过去的6天里,我一直在尝试在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"];
        }

猜测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文档:

那么,代码的其他部分将是这样的:

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"];
    }
}

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

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

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


您可以在

中看到dbconnect()的正确代码,我是这样做的,它工作正常。谢谢大家的帮助

$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"];
}

尝试阅读官方PDO文档并注意示例。你唯一需要做的重大改变是在MySQL查询中使用参数的方式。你是说你想让我们重写代码来为你使用PDO吗?不,我只是想知道如何从$sql=MySQL_查询(“SELECT*from products WHERE id='$item_id'LIMIT 1');但包括dbconnect();我对其进行了编辑,以显示我在执行会话时遇到的问题什么是
dbconnect()
?匿名投票人:请解释您认为此答案错误或不合适的原因。也许我可以改进一下。