2013-05-29 8 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 («SELECT * FROM products WHERE id = '$ item_id« LIMIT 1 »); НО, включая dbconnect(); –

ответ

-1

Гадать, что ваша БДСВЯЗЬ() функция содержит код, чтобы создать соединение с базой данных. Вот как настроить хороший 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

Anonymous downvoter: пожалуйста, объясните, почему вы считаете, что этот ответ неправильный или неуместный. Может быть, я могу это улучшить. –

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 массива и может перебирать его где-нибудь еще (в шаблоне, вероятно)

Правильный код для БДСВЯЗЬ () вы можете увидеть в 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"]; 
}