Exception 使用Zend_DB_表原始SQL增加值

Exception 使用Zend_DB_表原始SQL增加值,exception,zend-db-table,increment,fetchall,Exception,Zend Db Table,Increment,Fetchall,我有一个网站,用户可以在其中上传房地产的图像。 表格结构: image_id property_id userid filename thumbfilename display_order timestamp 情景: 当用户上传多张图片时,他/她应该能够从上传的图片中为指定属性设置主照片 守则: $sql = 'UPDATE property_images SET display_order = display_order + 1 WHERE property_id = "' . $this-

我有一个网站,用户可以在其中上传房地产的图像。
表格结构:

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') . '"');
问题是: 调用$images->getAdapter()->fetchAll()时,我收到一个“常规错误”;不过,SQL已成功执行,但Zend_DB_表引发异常,不会继续执行下一个命令。如果您有任何想法/建议,我们将不胜感激。

1)首先,请认识到您需要修复代码,以避免用户输入。您当前非常容易受到SQL注入的攻击

2) 为什么要将更新查询传递给fetchAll()

3) 看看Zend_Db_Expr

无需担心

解决方案:

$sql='UPDATE
property\u images
设置显示顺序=显示顺序+1,其中
property\u id
=“1004”和显示顺序<3; $images->getAdapter()->query($sql); $images->update(数组(“显示顺序”=>1),“
image\u id
=“2003”)


这将抓取第三个图像,并在分别设置显示顺序为1和2到2以及3的图像后将其设置为1。

我不易受到SQL注入的影响,因为这是在用户获取信息之前使用从脚本本身抓取的值来完成的。除了属性id和图像id之外,他们不能传递任何东西。我会进行检查以验证登录用户是否也是属性和图像的所有者。不过谢谢你,很公平。我仍然会明确地逃避事情,以防外部逻辑发生变化。代码有被重用的趋势,您依赖于授权代码失败,以确保坏参数永远不会进入数据库。