【问题标题】:Codeigniter not escaping single quotes in ODBC-mssql using ActiveRecordCodeigniter 未使用 ActiveRecord 转义 ODBC-mssql 中的单引号
【发布时间】:2012-10-24 17:02:48
【问题描述】:

我有一个包含一堆字段的表单。有时用户提供的信息和描述中带有单引号。

我正在使用 Jquery 和 CI 验证数据,问题是 ActiveRecord 显然没有转义单引号,导致插入/更新数据时出错。

ActiveRecord 不应该自动转义这些字符吗?如果没有,在用户输入中处理单引号的常用方法是什么?

处理插入的模型函数的示例代码:

public function setLicense($dataArray, $data_id="")
{
    $iRows  = 0; // Rows found.
    $DB = $this->load->database('some_database',TRUE,TRUE);

    //var_dump($dataArray);
    if(empty($dataArray))
        return(FALSE);

    if(!empty($data_id))
    {
        $DB->where('idx',$data_id);
        $iRows=$DB->count_all_results('some_table');
    }
    else
    {
        if(isset($LicenseData['idx']))
        {
            $license = $LicenseData['idx'];
            $DB->where('idx',$license);
            $iRows=$DB->count_all_results('some_table');
        }
    }
    if(!$iRows)
        $DB->insert('some_table',$dataArray);
    else
    {   
        $DB->where('idx',$data_id);
        $DB->update('some_table',$dataArray);
    }
    return(TRUE);
}

【问题讨论】:

  • 这在我看来不像 Javascript。您的问题基本上可以归结为“ActiveRecord 不应该为我处理这个吗?”只能回答“是”或“否”。见tinyurl.com/so-hints
  • @RobertHarvey 确实是一个错误,重新标记并更改了标题
  • 我已编辑您的问题以符合 Stack Overflow 社区在提问时通常期望的格式。
  • @RobertHarvey 好的,谢谢您的编辑...学习...
  • 根据文档,它确实会在插入或更新时对其进行转义,但不会以这种方式将其保存到数据库中。所以注射仍然不应该是一个问题。在这里查看更多信息:codeigniter.com/user_guide/database/queries.html 转义查询部分。

标签: php sql-server codeigniter odbc


【解决方案1】:

您描述的行为似乎是在连接 ODBC 数据库驱动程序时有意为之。这是来自this Ellislab forum discusssion的引述:

由于 ODBC 的本质 - 您几乎可以使用任何数据库 没有 CodeIgniter 的平台有办法知道它是哪一个。 并且不同的数据库有不同的转义字符和规则,所以 做这种逃避真的取决于你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 2019-11-29
    • 2015-01-10
    • 2012-07-18
    • 2011-05-11
    • 1970-01-01
    相关资源
    最近更新 更多