2016-04-08 10 views
0

私はコードmysqlを持っていますが、私はPDOに変換できません!pdoへのSqlコード変換

<?php 

    extract($_POST); 
    $check_exist_qry="select * from games"; 
    $run_qry=mysql_query($check_exist_qry); 
    $total_found=mysql_num_rows($run_qry); 
    if($total_found >0) 
    { 
     $my_value=mysql_fetch_assoc($run_qry); 
     $my_stored_game=explode(',',$my_value['game_name']); 
    } 

    if(isset($submit)) 
    { 
     $all_game_value = implode(",",$_POST['games']); 
      //insert 
      $ins_qry="INSERT INTO games(game_name) VALUES('".$all_game_value."')"; 
      mysql_query($ins_qry); 
    } 

    ?> 
+2

*方法* "あなたを助けますか"?どのような方法でコードが失敗していますか? (目立ったSQLインジェクションの脆弱性を除いて) – David

+2

SQLはPDOと同じですが、パラメータ化されたクエリを使用するだけです。あなたはここでPDOを使用していません。 http://php.net/manual/en/pdo.prepared-statements.phpまた、ユーザが提供するデータに 'extract'を使用する際の警告についても、http://php.net/manual/en/function.extract.php 。 – chris85

答えて

2

あなたの質問の下のコメントにあるように、あなたのコードはSQLインジェクションを受けやすいです。 私が見るところでは、データ構造を再考する必要があります。カンマ区切りの値リストを1つのフィールドに格納しているようです(おそらく、結合テーブルが良いかもしれません)。

さらに、ユーザーの入力(POST、GET、COOKIEなど)やエスケープ、フィルタ、サニタイズを信頼しないでください。純粋なPDOで

少なくともあなたのコード:

<?php 
    extract($_POST); 

    $db = new PDO($yourDSN, $yourUser, $yourPass); 

    $sql = "SELECT * FROM games"; 
    $stmt = $db->prepare($sql); 
    $stmt->execute(); 

    $res = $stmt->fetchAll(); 

    if ($res) { 
     $my_stored_game=explode(',',$my_value['game_name']); 
    } 

    if(isset($submit)) 
    { 
     $all_game_value = implode(",",$_POST['games']); 

     //insert 
     $sql = "INSERT INTO games (game_name) VALUES(:game_name)"; 
     $stmt = $db->prepare($sql); 
     $stmt->execute([ 
      ':game_name' => $all_game_value 
     ]); 
    } 

?> 
+0

しかし、この行にはエラーがあります。 '$ stmt-> execute([ ':game_name' => $ all_game_value ]); ' –

+0

' $ stmt-> execute(array( ':game_name' => $ all_game_value)); ' –

+0

@pashaalvndiどのようなエラーですか?非常に古いバージョンのPHP(5.4より前)を使用している場合、短い配列構文[]はサポートされていませんので、 '$ stmt-> execute(array( ':game_name' => $ all_game_value));代わりに。 –