【问题标题】:Increment values using Zend_DB_Table Raw SQL使用 Zend_DB_Table Raw SQL 增加值
【发布时间】:2009-09-13 18:05:46
【问题描述】:

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

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_Table 抛出异常并且不会继续执行下一个命令。任何想法/建议将不胜感激。

【问题讨论】:

    标签: exception zend-db-table increment fetchall


    【解决方案1】:

    1) 首先,认识到您需要修复代码以便逃避用户输入。您目前很容易受到 SQL 注入的攻击。

    2) 为什么要将 UPDATE 查询传递给 fetchAll()?

    3) 看Zend_Db_Expr

    【讨论】:

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

    没关系,

    解决办法:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-31
      • 2015-10-27
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多