为什么我不能将mysql_real_escape_string与zend framework update()方法一起使用?

时间:2011-11-13 19:03:48

标签: php mysql zend-framework

我遇到了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()方法,因为它实际上将斜杠放入数据库中的数据中。感谢。

2 个答案:

答案 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));
相关问题