我在Zend Db的update()
方法中遇到問題。這對於自己的sql注入是不安全的。爲什麼我不能使用mysql_real_escape_string和zend框架的update()方法?
選擇方法看起來很安全,所以我理論上可以做一個選擇,然後在修改要更新的字段後簡單地執行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()
方法,因爲它實際上將斜槓放入數據庫中的數據中。謝謝。
爲什麼你認爲它是開放的SQL注入?我不是說這不是,我只是想知道你爲什麼這麼想。 –
例如,如果您使用['Pdo_Mysql'](http://framework.zend.com/manual/en/zend.db.adapter.html),則不需要自行轉義字符串。 –
好點。我回到參考手冊,它並沒有說它沒有逃脫,雖然它談論使用quote(),我錯誤地認爲它是用於逃避數據。也許有問題。我會嘗試一次注射,看看會發生什麼。謝謝!! –