2016-04-08 69 views
0

我有一個代碼的mysql,但我不能轉換爲PDO請幫助我!Sql代碼轉換爲pdo

<?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注入。 從我看到的情況來看,您應該重新考慮您的數據結構,因爲您似乎在單個字段中存儲逗號分隔的值列表(也許連接表更好)。

此外,不要信任任何用戶輸入(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));''代替。 –