2013-03-03 62 views
0

我很新的PDO,我写这个code.But这个代码是不安全的。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 – 2013-03-03 16:03:35

+0

它应该是'$值[ “:ID”]' – hjpotter92 2013-03-03 16:04:47

+0

@DreamEater没有它没关系 – PeeHaa 2013-03-03 16:10:42

回答

0

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

此功能旨在使插入更容易和更安全。 但是,如果使用函数不熟悉你,最好从前面的答案去找另一个解答。

+0

哦,对不起,我没有看到链接:)现在是工作。谢谢你的发布。 – user2071763 2013-03-03 17:26:33