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. Извините, мой английский не так хорош.


person user2071763    schedule 03.03.2013    source источник
comment
Я нашел этот пост, который может помочь stackoverflow.com/questions/ 5684191/   -  person Conrad Lotz    schedule 03.03.2013
comment
Должно быть $values[":id"]   -  person hjpotter92    schedule 03.03.2013
comment
@DreamEater нет, это не имеет значения   -  person PeeHaa    schedule 03.03.2013
comment
@PeeHaa Это так? AFAIK, используя :id в инструкции sql, нуждается в том, чтобы переданный массив имел :id в качестве индекса.   -  person hjpotter92    schedule 03.03.2013
comment
@PeeHaa ты прав   -  person user2071763    schedule 03.03.2013


Ответы (1)


Я использовал эту функцию в своем другом ответе, потому что она присутствует в вики тега 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); 
}

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

person Your Common Sense    schedule 03.03.2013
comment
О, извините, я не видел ссылку :) Теперь это работает. Спасибо за публикацию. - person user2071763; 03.03.2013