我建設有select, insert, delete, update
功能的PDO包裝,其實我所做的看起來是這樣的更新functon:Pdo包裝功能是否安全?
/**
* @param string $table name of the table
* @param array $data data to update
* @param string $where where clause
* @return bool result
*/
public function update($table, $data, $where)
{
ksort($data);
$fieldDetails = NULL;
foreach($data as $key=> $value)
{
$fieldDetails .= "`$key`=:$key,";
}
$fieldDetails = rtrim($fieldDetails, ',');
$sth = $this->prepare("UPDATE $table SET $fieldDetails WHERE $where");
foreach ($data as $key => $value)
{
$sth->bindValue(":$key", $value);
}
return $sth->execute();
}
使用的例子:
$postData = array(
'username' => 'foo',
'role' =>'admin'
);
$this->db->update('login', $postData, "`id` = {$data['id']}");
我不知道這是安全的,或者我錯過了一些重要的東西,有人建議改善這一點?
在此先感謝。
它取決於'$ data'中的值來自哪裏。如果他們來自用戶輸入,那麼你可以得到SQL注入。如果這是一個像'$ postData'這樣的數組,那麼會更好,並且您也使用了'bindValue'。 – Barmar
@Barmar是來自用戶輸入.. – AgainMe
然後你應該使用'bindValue',或者至少在$ where $> escape()' – Barmar