2016-03-29 24 views
-1

私はスクリプトをPDO接続に変換しようとしていますが、スクリプトのこの部分で助けが必要です。私はほとんどの部分をやったが、私はその配列を交換してセッションに持っていく必要があるので、この部分にぶつかった。MysqlをPDOに変換する

if(!empty($_GET["action"])) { 
switch($_GET["action"]) { 
    case "add": 
     if(!empty($_POST["quantity"])) { 
      $productByCode = $handler->query("SELECT * FROM tooted WHERE kood='" . $_GET["code"] . "'");; 


      $itemArray = array($productByCode[0]["code"]=>array('name'=>$productByCode[0]["name"], 'code'=>$productByCode[0]["code"], 'quantity'=>$_POST["quantity"], 'price'=>$productByCode[0]["price"])); 

      if(!empty($_SESSION["cart_item"])) { 
       if(in_array($productByCode[0]["code"],$_SESSION["cart_item"])) { 
        foreach($_SESSION["cart_item"] as $k => $v) { 
          if($productByCode[0]["code"] == $k) 
           $_SESSION["cart_item"][$k]["quantity"] = $_POST["quantity"]; 
        } 
       } else { 
        $_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray); 
       } 
      } else { 
       $_SESSION["cart_item"] = $itemArray; 
      } 
     } 
    break; 
    case "remove": 
     if(!empty($_SESSION["cart_item"])) { 
      foreach($_SESSION["cart_item"] as $k => $v) { 
        if($_GET["code"] == $k) 
         unset($_SESSION["cart_item"][$k]);    
        if(empty($_SESSION["cart_item"])) 
         unset($_SESSION["cart_item"]); 
      } 
     } 
    break; 
    case "empty": 
     unset($_SESSION["cart_item"]); 
    break; 
} 
} 
+0

特にどの部分に問題がありますか? –

+0

PDOを配列として使用することはできません "PDOStatement型のオブジェクトを配列として使用できません" $ itemByCode ["name" => $ productByCode [0] ["code"] => array ";" code "=> $ productByCode [0] [" code "]、[数量] => $ _ POST ["数量 "]、[価格] => $ productByCode [0] [" price "])); –

答えて

1

PDO::queryは本当に古いmysql_* APIにはアナログを持っていないタイプPDOStatementのオブジェクトを返します。エラーメッセージには、オブジェクトではなく配列であることが示されています。実際にはMySQLストアドプロシージャのカーソルのように機能します。つまり、データを取得する唯一の方法は、fetch*メソッドの1つを呼び出すことです。あなたの場合、これはPDOStatement::fetchAllであり、結果のすべての行を含む配列を返します。

ところで、PDOに切り替える理由の一つは、あなたの現在のコードは、特に脆弱であるとSQL injection attackの一種から守る手助けプリペアドステートメントの可用性です。プリペアドステートメントは、クエリに挿入された変数の正しい引用、エスケープ、およびタイプマッチングを自動的に処理します。関連するコードは、これは、各行と列の数値配列、連想配列に$productByCodeを設定

$sql = "SELECT * FROM tooted WHERE kood = :code"; 
$stmt = $handler->prepare($sql); 
$stmt->execute(array(':code' => $)GET['code'])); 
$productByCode = $stmt->fetchAll(PDO::FETCH_ASSOC); 

あろう。

あなたは結果が1行だけ含まれていることを知っている場合は、代わりに連想配列として単一の行を返す

$productByCode = $stmt->fetch(PDO::FETCH_ASSOC); 

を使用することができます。

もちろん、エラー処理の機会はありますが、私はそれらを読者の練習として残しています。

希望に役立ちます。