我遇到了Zend Db update()
方法的问题。单独进行sql注入是不安全的。
选择方法似乎是安全的,所以我理论上可以做一个选择,然后在修改我想要更新的字段后再做一个save()
。但是,我不想运行2个查询 - 一个选择后跟一个更新,只是为了运行更新。这看起来效率不高。
为了解决这个问题,我尝试使用mysql_real_escape_string()
,但它实际上导致我尝试更新的数据作为空字符串进入数据库。不知道为什么。
以下是代码:
public function updateMyTable($data,$id){
$safeData=array();
foreach($data as $field=>$val){
$safeData[$field] = mysql_real_escape_string($val);
}
$where[]= 'id = '.mysql_real_escape_string($id);
self::instance()->update($safeData,$where)
}
有没有人知道我是否有不正确的东西导致空白数据库条目?或者,一种安全使用update()
的方法?我不想使用Zend的quote()
方法,因为它实际上将斜杠放入数据库中的数据中。感谢。
答案 0 :(得分:3)
mysql_real_escape_string
需要与mysql_connect
打开的数据库建立连接才能正常工作,如果框架使用其他驱动程序,例如mysqli
它将无法使用此函数转义字符串。在查找文档时,应该有一种特殊的方法来在框架内转义数据。
答案 1 :(得分:3)
在Zend Framework中更新模型时,您应该编写如下代码:
$Values = array(
'Col1' => $this->Attr1,
'Col2' => $this->Attr2
);
$RowChanged = $Db->update('table_name', $Values, $Db->quoteInto('Id = ?', $this->Id));