【问题标题】:PDO.How i can use this function?PDO.我如何使用这个功能?
【发布时间】:2013-03-03 16:00:36
【问题描述】:

我是 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 中写什么。对不起,当我的英语不太好时。

【问题讨论】:

  • 我发现这篇文章可能会帮助stackoverflow.com/questions/5684191/…
  • 应该是$values[":id"]
  • @DreamEater 不,没关系
  • @PeeHaa 是这样吗? AFAIK,在 sql 语句中使用 :id,需要传递的数组以 :id 作为索引。
  • @PeeHaa 你是对的

标签: php security pdo implode


【解决方案1】:

我在其他答案中使用了此功能,因为它存在于我链接的 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); 
}

此功能旨在使插入更容易和更安全。 但是,如果您对函数的使用不熟悉,最好选择上一个答案中的其他解决方案。

【讨论】:

  • 哦,对不起,我没有看到链接 :) 现在可以使用了。谢谢您的发帖。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-30
  • 2015-09-28
  • 2021-09-20
  • 1970-01-01
相关资源
最近更新 更多