2009-09-13 42 views
0

我有一個網站,用戶可以在其中上傳房地產屬性的圖像。
表結構:使用Zend_DB_Table增量值原始SQL

image_id 
property_id 
userid 
filename 
thumbfilename 
display_order 
timestamp 

場景: 當用戶上傳多張圖片時,他/她應該能夠從他們上傳的圖片設置主照片的指定屬性。

代碼:

$sql = 'UPDATE property_images SET display_order = display_order + 1 WHERE property_id = "' . $this->_request->getParam('propertyid') . '"'; 
$images->getAdapter()->fetchAll($sql); 
$images->update(array("display_order" => 1), 'image_id = "' . $this->_request->getParam('imageid') . '"'); 

問題: 我收到 「常規錯誤」 調用$圖像 - 當> getAdapter() - >使用fetchall();然而,SQL成功執行,但Zend_DB_Table拋出一個異常,不會繼續執行下一個命令。任何想法/建議,將不勝感激。

回答

0

沒關係,

解決方案是:

$ SQL =「UPDATE property_images SET display_order = display_order + 1 WHERE property_id = 「1004」 AND display_order < 3 ; $ images-> getAdapter() - > query($ sql); $ images-> update(array(「display_order」=> 1),'image_id =「2003」');

設置顯示順序爲1和2的圖像分別爲2和3後,將抓取第三張圖像並將其設置爲1。

0

1)首先,認識到您需要修復代碼,以避免用戶輸入。您目前非常容易受到SQL注入的攻擊。

2)爲什麼你將一個UPDATE查詢傳遞給fetchAll()?

3)看Zend_Db_Expr

+0

我不容易受到SQL注入攻擊,因爲這是在用戶獲取信息之前使用從腳本中獲取的值完成的。除了屬性ID和圖像ID之外,他們無法傳遞任何內容。我做了一個檢查來驗證用戶是否屬於該屬性和圖像的所有者。謝謝anywa。 – 2009-09-13 18:35:40

+0

夠公平的。如果外部邏輯發生變化,我仍然會明確地轉義。代碼有被重用的傾向,並且您依靠授權代碼失敗,以確保不良參數永遠不會將其傳遞到數據庫。 – timdev 2009-09-13 19:15:36