2009-09-13 50 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