Php PDO。我如何使用这个函数?

Php PDO。我如何使用这个函数?,php,security,pdo,implode,Php,Security,Pdo,Implode,我是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(',

我是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中写些什么。很抱歉,我的英语不是很好。

我在另一个答案中使用了这个函数,因为它存在于我链接的PDO标记wiki中。
但好吧,我可以把它贴在这里

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); 
}
此功能旨在使插入更容易、更安全。
但是,如果您不熟悉使用函数,最好使用上一个答案中的其他解决方案。

我发现这篇文章可能会有帮助,应该是
$values[“:id”]
@DreamEater不,没有matter@PeeHaa是这样吗?AFAIK在sql语句中使用
:id
,需要传递的数组将
:id
作为索引。@PeeHaa您是对的哦,对不起,我没有看到链接:)现在可以了。谢谢您的发布。