2016-09-18 41 views
-3

我需要將mysql_query轉換爲PDO的幫助。編輯列時,MySQL數據庫不會更新。我試着翻譯下面的代碼:mysql_query到處理pdo轉換錯誤

<?php 
include("connect.php"); 
if($_GET['id'] and $_GET['data']) 
{ 
    $id = $_GET['id']; 
    $data = $_GET['data']; 
    $key = $_GET['key']; 
    if(mysql_query("update information set $key='$data' where id='$id'")) 
    echo 'success'; 
    } 
} 
?> 

進入這個:

<?php 
include("connect.php"); 

if(isset($_GET))  
{ 
    $id = $_GET['id']; 
    $data = $_GET['data']; 
    $key = $_GET['key']; 
} 

try { 
    $pdo = new PDO(DSN, DB_USR, DB_PWD); 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $pdo->query("SET NAMES utf8"); 
    $stmt = $pdo->prepare(
     "UPDATE information 
     SET 
     key=:data where id=:id" 
    ); 
    $stmt->bindValue(':id', $id, PDO::PARAM_INT); 
    $stmt->bindValue(':key', $data, PDO::PARAM_STR); 
    $stmt->execute(); 

} catch (PDOException $e){ 
    var_dump($e->getMessage()); 
} 
$pdo = null; 
+0

你試過的東西也把這段代碼 –

回答

0

你在你的bindValue()調用中使用:key當它應該是:data。您還需要將$key放入查詢中(無法爲列名使用佔位符,因此需要變量替換)。

$stmt = $pdo->prepare(
    "UPDATE information 
    SET 
    $key = :data where id=:id" 
); 
$stmt->bindValue(':id', $id, PDO::PARAM_INT); 
$stmt->bindValue(':data', $data, PDO::PARAM_STR); 
$stmt->execute(); 

在替換它之前,您應驗證$key以防止SQL注入。例如:

$allowed_keys = array('col1', 'col2', 'col3'); 
if (!in_array($key, $allowed_keys)) { 
    die("Bad key $key"); 
}