2013-03-03 2 views
0

Я очень новичок в PDO, и я пишу этот код. Но этот код небезопасен.PDO.Как я могу использовать эту функцию?

function update_user($update_data) { 
global $pdo; 

$update = array(); 

foreach($update_data as $field=>$data){ 
$update[] = '`'. $field.'` = \''. $data.'\''; 
} 
$query = $pdo->prepare("UPDATE users SET " . implode(', ', $update) ."WHERE user_id = " .$_SESSION['user_id']); 
$query->execute(); 

}

Я спрашиваю интернет об этом коде и стать этим:

function update_user($update_data) { 
global $pdo; 
$sql = "UPDATE users SET ".pdoSet($update_data,$values)." WHERE id = :id"; 
$stm = $pdo->prepare($sql); 
$values["id"] = $_SESSION['user_id']; 
$stm->execute($values); 

}

Но, я не знаю, что я должен написать в функции pdoSet. Извините, когда мой английский не очень хорош.

+0

Я нашел это сообщение, которое могло бы помочь http://stackoverflow.com/questions/5684191/pdo-bindparam-into-one-statement –

+0

Это должно быть '$ values ​​[": id "]' – hjpotter92

+0

@DreamEater no it не имеет значения – PeeHaa

ответ

0

Я использовал эту функцию в своем другом ответе, потому что она присутствует в вики-теге PDO, который я связал.
Но все в порядке, я могу вставить его здесь для вас.

function pdoSet($fields, &$values, $source = array()) { 
    $set = ''; 
    $values = array(); 
    if (!$source) $source = &$_POST; 
    foreach ($fields as $field) { 
    if (isset($source[$field])) { 
     $set.="`".str_replace("`","``",$field)."`". "=:$field, "; 
     $values[$field] = $source[$field]; 
    } 
    } 
    return substr($set, 0, -2); 
} 

Эта функция предназначена для облегчения и безопасного вставки. Однако, если использование функций вам не знакомо, лучше перейдите к другому решению из предыдущего ответа.

+0

О, извините, я не видел ссылку :) Это работа сейчас. Спасибо за публикацию. – user2071763

Смежные вопросы