sql
  • codeigniter
  • 2012-01-11 61 views 1 likes 
    1

    我在我的数据库测试该查询的预期结果,并能正常工作:笨数据库查询错误 - 不返回

    select * from variables where value = 'commas-:-)';

    我得到一个结果。现在,我将该值存储在一个变量中并使用查询类。

    $value = 'commas-:-)' < < <这个作为参数传递现在

    $query = "select * from variables where value = '$value'"; 
    $this->db->query($query); 
    

    ,这个查询适用于除本每隔一个值 - 但有什么奇怪的是,如果我打印出精确的查询(print_r$query)并在数据库上执行它,它会返回正确的结果。所以我还是认为查询类与我的查询无关,它不应该是因为一切都妥善转义,并且$value是一个字符串文字。

    这是怎么回事?

    +0

    您是否尝试过运行活动查询来查看是否有区别? '$ this-> db-> get_where('variables',array('value'=> $ value));' – Jakub 2012-01-11 02:33:37

    +0

    我刚试过 - 没有区别。我打印出来的查询,它仍然正常工作。嗯。 – Kira 2012-01-11 17:23:06

    回答

    0

    我发现了问题 - 这是这是造成这场灾难的重新路由功能。更具体地说,系统内核中路由文件夹中的段过滤功能。

    事情是这样的:

    我创建了编码值(逗号:-))的锚和我配置的路由到URI重新路由到一个功能,我在我的控制器。每次点击链接时,该值都会被传递,并且(据推测)会被重新路由到该函数。它所做的几乎是我所用的所有价值。除此之外。

    1假设:DB查询功能转义值。但是我关闭了转义,以及通过打印检查查询。该值是正确的。然后我尝试了其他查询格式,但仍然没有结果。结论:数据库查询功能没有任何问题。

    第二个假设:数据必须被破坏 - 虽然值是正确的(我收到逗号:-)),它不返回除了当我在值手动输入任何东西。所以我测试了这个: 我创建了一个独立的值,并将其设置为等于我输入的那个(工作的那个)。然后我使用VAR_DUMP打印原始值(一个传递)和新创建的值。 原来,参数值(一个不起作用)是一个长度为14的字符串,而我的新变量是一个长度为10的字符串。WTF?结论:在改变变量的重新路由/传递过程中发生了某些事情。

    我又回到了config文件夹,并替换变量$ i的重新路由到字符串值逗号:-)。你猜怎么着?它工作完美。只是为了确保它不是正则表达式,我写了自己的自定义正则表达式,它很好匹配,但值仍然在改变。所以我决定深入研究。

    我将路由类中的URI操作追溯到_explode_segment()函数,该函数用于执行正则表达式并分析其他变量的uri。它也做了这个事情...

    _filter_uri($ STR)

    因为这是相匹配的URI段的每个部分。

    它做了什么?它用(和)HTML实体代替可编程字符。现在,如果你不知道,html实体的长度比url编码长。大声笑。所以发生了什么事情是这样的:

    原始分段:逗号 - %3A-%29 < - 非常好! 已过滤的分段:逗号 - %3A-)< - NOOOOOOOOO! (编码有&#41右边括号。)

    urldecode(” &#41 “)=串(4) urldecode(” %29" )=串(1)

    失败。

    或WIN ?!

    0
    $sql = "SELECT * FROM variables WHERE value = ?"; 
    $this->db->query($sql, array('commas-:-)')); 
    

    更多info

    0
    $get_data = $this->db->from('variables') 
             ->where('value', $value) 
             ->get(); 
    

    希望这将工作...!

    尝试使用这些东西来检查查询

    echo $this->db->last_query(); 
    
    print_r($this->db->result_array($get_data)); 
    
    +0

    我也试过这个 - 同样的结果(没有结果)。我也测试了它返回的查询,并且它在数据库上工作正常。 – Kira 2012-01-11 17:23:38

    相关问题